<?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>Boletins on Nostr Compass</title><link>https://nostrcompass.org/pt/newsletters/</link><description>Recent content in Boletins on Nostr Compass</description><generator>Hugo</generator><language>pt</language><atom:link href="https://nostrcompass.org/pt/newsletters/feed.xml" rel="self" type="application/rss+xml"/><item><title>Nostr Compass #26</title><link>https://nostrcompass.org/pt/newsletters/2026-06-10-newsletter/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-06-10-newsletter/</guid><description>&lt;p>A organização Marmot Protocol abre três novos repositórios para um rascunho de protocolo v2 e uma linhagem de clientes nativos: um workspace Rust chamado &lt;code>darkmatter&lt;/code>, um app SwiftUI iOS &lt;code>darkmatter-ios&lt;/code> e um app Kotlin/Compose Android &lt;code>darkmatter-android&lt;/code>. O Flutter Whitenoise original é arquivado. A Chama comprime dezessete lançamentos em uma semana e cruza a linha de app independente na v3.0.0 antes de entregar uma reescrita completa da UI da sala de negociação e vitrines por vendedor na v3.1.0, em cima de compartilhamentos Shamir apenas do titular, substituição de árbitros, roteamento de comunidade mundial e notificações de negociação de ponta a ponta. A Coracle lança um serviço pago de relay hospedado apoiado pela stack open source Caravel e zooid, com integração profunda com Flotilla planejada. Angor muda para mainnet por padrão na v0.2.30 e entrega um teste de financiamento UAT de 3 usuários na v0.2.29. Amethyst entrega 41 PRs não lançados continuando o trabalho de NIP-32 / NIP-F4 / Tor da semana passada. NIP-67 (dica de completude EOSE) e autocompletar de NIP-50 são mesclados, fechando duas lacunas de correção de longa data no protocolo de relay central. NIP-GART propõe um formato de fio de preservação de privacidade para alertas de emergência, e NIP-46 ganha um método de logout.&lt;/p></description><content:encoded>&lt;p>A organização Marmot Protocol abre três novos repositórios para um rascunho de protocolo v2 e uma linhagem de clientes nativos: um workspace Rust chamado &lt;code>darkmatter&lt;/code>, um app SwiftUI iOS &lt;code>darkmatter-ios&lt;/code> e um app Kotlin/Compose Android &lt;code>darkmatter-android&lt;/code>. O Flutter Whitenoise original é arquivado. A Chama comprime dezessete lançamentos em uma semana e cruza a linha de app independente na v3.0.0 antes de entregar uma reescrita completa da UI da sala de negociação e vitrines por vendedor na v3.1.0, em cima de compartilhamentos Shamir apenas do titular, substituição de árbitros, roteamento de comunidade mundial e notificações de negociação de ponta a ponta. A Coracle lança um serviço pago de relay hospedado apoiado pela stack open source Caravel e zooid, com integração profunda com Flotilla planejada. Angor muda para mainnet por padrão na v0.2.30 e entrega um teste de financiamento UAT de 3 usuários na v0.2.29. Amethyst entrega 41 PRs não lançados continuando o trabalho de NIP-32 / NIP-F4 / Tor da semana passada. NIP-67 (dica de completude EOSE) e autocompletar de NIP-50 são mesclados, fechando duas lacunas de correção de longa data no protocolo de relay central. NIP-GART propõe um formato de fio de preservação de privacidade para alertas de emergência, e NIP-46 ganha um método de logout.&lt;/p>
&lt;h2 id="destaques-principais">Destaques principais&lt;/h2>
&lt;h3 id="marmot-v2-dark-matter-redraft-do-protocolo-clientes-nativos-app-flutter-arquivado">Marmot v2 (Dark Matter): redraft do protocolo, clientes nativos, app Flutter arquivado&lt;/h3>
&lt;p>Três novos repositórios surgiram sob a organização GitHub &lt;a href="https://github.com/marmot-protocol">marmot-protocol&lt;/a> esta semana, juntos formando a forma de progresso inicial de um rascunho do protocolo Marmot v2 e uma linhagem de clientes nativos que substitui a linha do app Flutter. &lt;a href="https://github.com/marmot-protocol/darkmatter">&lt;code>darkmatter&lt;/code>&lt;/a> (Rust, criado em 13 de maio, trinta e quatro commits nos últimos sete dias) mantém o rascunho do protocolo v2 em &lt;code>spec/&lt;/code>, um motor CGKA baseado em OpenMLS em &lt;code>crates/cgka-engine&lt;/code>, um simulador de conformidade com testes de propriedade, e um modelo formal Tamarin para provas de convergência. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> (Swift, criado em 25 de maio) é um cliente SwiftUI apoiado por um xcframework UniFFI &lt;code>MarmotKit&lt;/code> vendorizado gerado a partir do workspace Rust. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> (Kotlin/Jetpack Compose, criado em 25 de maio) fica sobre os mesmos bindings Rust. O Flutter Whitenoise original foi marcado como &lt;a href="https://github.com/marmot-protocol/whitenoise-archive">&lt;code>whitenoise-archive&lt;/code>&lt;/a> (&amp;ldquo;ARQUIVADO: Este era o app Flutter original do White Noise&amp;rdquo;); um novo repositório Dart &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> carrega a linha Flutter ativa em paralelo.&lt;/p>
&lt;p>Leia isto como progresso inicial em direção a um Marmot mais confiável, não como uma virada terminada. O README do darkmatter se rotula como &amp;ldquo;Rascunho candidato do protocolo Marmot v2, motor CGKA e workspace de conformidade&amp;rdquo; e diz diretamente: &amp;ldquo;MDK permanece a implementação Rust do protocolo implantada até que este rascunho e motor sejam adotados&amp;rdquo;. Dentro do workspace, a crate cgka-engine está marcada como &lt;code>0.1.0&lt;/code>, &amp;ldquo;único consumidor interno, não estável em semver&amp;rdquo;. Cada página de spec traz &amp;ldquo;Status: rascunho para revisão interna&amp;rdquo;. Três estrelas no repositório do workspace e zero nos apps iOS e Android confirmam que o trabalho está pré-anúncio. Direção, escopo e disciplina são o sinal aqui; a prontidão para produção não é a alegação.&lt;/p>
&lt;p>O rascunho do protocolo torna concretos os deltas de v1 para v2. A extensão MLS &lt;code>marmot_group_data&lt;/code> monolítica do MIP-01, que carregava nome do grupo, descrição, pubkeys de admin, id de roteamento de grupo Nostr, lista de relays, dados de imagem do grupo e configurações de mensagens que desaparecem sob um único guarda-chuva desde o início do Marmot, é &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/spec/mip-coverage.md">dividida em componentes de app versionados&lt;/a>: &lt;code>marmot.group.profile.v1&lt;/code> para nome e descrição, &lt;code>marmot.group.admin-policy.v1&lt;/code> para pubkeys de admin, &lt;code>marmot.transport.nostr.routing.v1&lt;/code> para o &lt;code>nostr_group_id&lt;/code> aleatório e a lista canônica de relays, &lt;code>marmot.group.blossom.image.v1&lt;/code> para hash da imagem, chave de criptografia, nonce e chave de upload, e &lt;code>marmot.group.message-retention.v1&lt;/code> para segundos de mensagens que desaparecem. Cada componente é dono dos seus bytes exatos e do seu próprio caminho de versionamento, então um recurso futuro pode revisar um componente sem forçar o resto do estado do grupo a repisar o consenso da extensão MLS. As credenciais MIP-00 também ganham um novo documento fundamental &lt;code>account-identity-proof-v1.md&lt;/code>, chamado como &amp;ldquo;novo em v2 e disruptivo&amp;rdquo;. A prova de identidade agora vive na sua própria superfície, separada da construção do KeyPackage.&lt;/p>
&lt;p>Os deltas de biblioteca sustentam a retrabalho do spec. &lt;code>cgka-engine&lt;/code> é a nova máquina de estado local do grupo: ela envolve OpenMLS, é dona dos estados de época &lt;code>Stable&lt;/code>, &lt;code>PendingPublish&lt;/code>, &lt;code>Merging&lt;/code> e &lt;code>Recovering&lt;/code>, traduz intenções em commits MLS, retorna valores tipados &lt;code>IngestOutcome&lt;/code> e &lt;code>GroupEvent&lt;/code> para cada envelope de transporte de entrada, e explicitamente não entrega nem transporte nem persistência. Uma trait &lt;code>TransportPeeler&lt;/code> separa Nostr do motor, e uma trait &lt;code>StorageProvider&lt;/code> separa SQLite (via &lt;code>storage-sqlite&lt;/code>, apoiado por SQLCipher) do motor. O MDK de hoje empacota tudo isso junto; dividir as camadas permite que um motor fique sob um transporte de relay Nostr agora e sob os também entregues &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/docs/quic-broker-deployment.md">transportes de fluxo QUIC e broker&lt;/a> mais tarde, sem reescrever o modelo de convergência. A convergência em si é documentada como &lt;code>distributed-convergence.md&lt;/code> e provada em um modelo Tamarin que cobre seleção determinística de branch, elegibilidade fechada por política, reprodução de âncora retida, rejeição de branch obsoleto, reordenação de entrega, duplicação, invalidação de saída de app, transferência welcome/commit, consumo de proposta e limitação de saída durante sincronização. Testes de propriedade em Rust então verificam que o motor segue as mesmas regras com objetos OpenMLS reais e a estrutura do simulador. Trabalho de confiabilidade em métodos formais desta escala está ausente da stack Marmot atual.&lt;/p>
&lt;p>Ambos os clientes nativos abandonam Flutter por toolkits de UI nativos da plataforma. &lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> é puro SwiftUI com uma Notification Service Extension que descriptografa despertares de push MIP-05 no dispositivo, vendoriza um pacote Swift &lt;code>MarmotKit&lt;/code> gerado construído a partir do workspace Rust, e se registra sob o bundle ID &lt;code>dev.ipf.darkmatter&lt;/code> e grupo de app. &lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> é Kotlin e Jetpack Compose, com uma build orientada por &lt;code>just&lt;/code> que produz um APK &lt;code>arm64-v8a&lt;/code> assinado e lê endpoints de telemetria de &lt;code>local.properties&lt;/code>. O README do Android declara o princípio arquitetural diretamente: &amp;ldquo;Dark Matter é dona dos dados do protocolo e os armazena em SQLite. O app Android deve renderizar esses dados, gerenciar o comportamento da plataforma Android e manter o estado do ciclo de vida da UI. O app Android não deve se tornar uma segunda base de dados para dados de Dark Matter&amp;rdquo;. Isso espelha a disciplina de fronteira que o README do cgka-engine impõe na camada Rust, aplicada à camada de UI.&lt;/p>
&lt;p>Clientes nativos importam para Marmot porque a fraqueza mais citada do protocolo tem sido a confiabilidade móvel sob condições de entrega irregulares: despertares de notificação de prazo perdido, corridas de commit MLS durante flaps de rede, limites de busca em segundo plano que encalham avanços de época. SwiftUI e Compose dão aos clientes acesso direto a primitivos de processamento em segundo plano da plataforma que o Flutter alcança através de uma ponte de plugin, e o caminho de binding UniFFI mantém a lógica do protocolo em um único workspace Rust entregue como uma biblioteca estática em ambas as plataformas. A linha do Flutter Whitenoise continua no repositório &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> não arquivado, então o anúncio é aditivo: uma nova linhagem de cliente nativo roda ao lado do app Flutter enquanto o spec v2 converge. A troca de produção do MDK ou do app Whitenoise atual espera pelo rascunho, motor e clientes atingirem lançamentos prontos para produção.&lt;/p>
&lt;h3 id="chama-v200-até-v310-escrow-p2p-independente-em-uma-semana">Chama v2.0.0 até v3.1.0: escrow P2P independente em uma semana&lt;/h3>
&lt;p>O cliente de escrow P2P nativo do Nostr introduzido na Newsletter #25 na v1.3.0 entregou dezessete lançamentos taggeados nos últimos sete dias, terminando na &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a> em 9 de junho com uma reescrita da UI da sala de negociação e vitrines por vendedor. A trilha de versões conta a história: &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.0">v2.0.0&lt;/a> é a base DISRUPTIVA, então &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> e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.3">v2.0.3&lt;/a> fecham as lacunas do trilho de financiamento Fedi WebView; &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> e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.1">v2.3.1&lt;/a> reforçam a camada de árbitros; &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> e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.6.0">v2.6.0&lt;/a> adicionam superfícies de auto-custódia e roteamento de comunidade 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> e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.10.0">v2.10.0&lt;/a> camadam cópia de chave em inglês simples, aplicações de grupo, arbitragem de prazo de disputa e reputação. &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.0.0">v3.0.0&lt;/a> amarra o pacote com notificações de negociação de ponta a ponta, e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a> em 9 de junho redesenha a tela de negociação em torno de uma espinha de progresso Reservado → Bloqueado → Liquidado, cartões de ação coloridos por papel e uma classe de listagem de vitrine por vendedor (swaps curados, livros de empréstimos e faturas).&lt;/p>
&lt;p>O pivô arquitetural vive na v2.0.0. O formato LOCK de escrow mudou para que cada compartilhamento de uma divisão Shamir 2-de-3 seja criptografado apenas para seu titular (sharePolicy &lt;code>holder-only-v1&lt;/code>). O ecash ao portador da federação não reconstrói mais a partir de um único participante sozinho, fechando um caminho onde uma parte maliciosa com seu próprio compartilhamento e um compartilhamento mantido pela federação poderia completar a negociação sem consentimento. Clientes pré-2.0 falham em voz alta com &amp;ldquo;não consegue encontrar seu compartilhamento&amp;rdquo;; a negociação não pode completar em um cliente obsoleto, e nenhum fundo é perdido no processo. Um bloqueio v2.0 requer que cada parte na v2.x liquide. A v2.0.0 também adicionou vitrines multi-unidade e uma visualização de Mercado apenas em sats.&lt;/p>
&lt;p>A v2.1.0 introduziu a substituição de árbitros: o compartilhamento do árbitro no índice 2 de Shamir agora é criptografado para uma ordem de prioridade determinística sobre o pool de árbitros da comunidade, então um árbitro ausente pode ser substituído sem encalhar a negociação. A v2.2.0 provou que a substituição funcionou em campo em uma negociação de ₿121 e adicionou backups de substituição de cura. A v2.3.0 fechou a última lacuna de front-running de árbitros verificando a associação do árbitro à comunidade da listagem no momento do bloqueio, e a v2.3.1 fechou a corrida irmã onde um slot de árbitro auto-atribuído era uma prévia até o bloqueio os assentar.&lt;/p>
&lt;p>As superfícies de auto-custódia chegaram na v2.4.0 (frase de recuperação BIP-39 para a carteira ecash Fedimint, armazenada criptografada no Nostr) e v2.5.0 (backup master nsec que é dono da identidade Nostr e da semente da carteira). A v2.6.0 retrabalhou o onboarding em torno de um seletor de comunidade global para que usuários em países sem uma Chama local sejam roteados para a federação mais próxima; builds anteriores rebatiam o usuário sem fallback. A v2.7.0 reescreveu a tela de chave de recuperação em inglês simples (&amp;ldquo;a única chave para sua conta e o dinheiro nela; Chama nunca a vê e não pode redefini-la; se você perder, ninguém pode recuperar sua conta&amp;rdquo;). A v2.8.0 adicionou aplicações de grupo, tema escuro/claro, e adicionou dois novos kinds de evento (38120 roster, 38121 aplicação). A v2.9.0 mudou a resolução de disputas no prazo: negociações contestadas que atingem o vencimento agora resolvem por decisão do árbitro; comportamento anterior fazia reembolso automático. O lançamento é marcado COORDINATED para que todas as partes em uma disputa devem atualizar. A v2.10.0 adicionou classificações de polegar para cima/polegar para baixo por negociação como um novo kind de evento 38123.&lt;/p>
&lt;p>A v3.0.0 é o marco onde o app para de precisar de uma comunidade de coordenação para operar. Notificações de negociação de ponta a ponta pingam o usuário apenas em transições de estado acionáveis: contraparte bloqueou os sats, pagamento pronto para reivindicar, disputa requer a decisão do usuário como árbitro, ou negociação liquidada ou expirada. Um toggle na tela Eu liga ou desliga as notificações, e o prompt de permissão dispara apenas quando o toggle está habilitado. O dedup fire-once impede que uma recarga de estado dispare uma tempestade de alertas. Um bug de guardrail chama-errada também foi fechado no &lt;a href="https://github.com/jesuspirate/chama/pull/103">PR #103&lt;/a>, onde versões anteriores podiam carimbar uma listagem com o rótulo de uma chama mas a federação de outra chama. Bundles desktop para Windows e Linux são entregues com o lançamento; o dmg macOS é retido até que assinatura e notarização cheguem.&lt;/p>
&lt;p>Chama agora se junta a Mostro e Shopstr como um marketplace nativo do Nostr, distinguido por arquitetura sem servidor, escrow Shamir 2-de-3 apoiado por Fedimint, criptografia de compartilhamento apenas do titular, e o único dos três que entrega um cliente desktop e móvel autocontido sem uma comunidade de coordenação.&lt;/p>
&lt;h3 id="coracle-hosting-serviço-de-relay-pago-mais-stack-caravel-open-source">Coracle Hosting: serviço de relay pago mais stack Caravel open source&lt;/h3>
&lt;p>Em 3 de junho, Hodlbod &lt;a href="https://nos.lol/e/f8586160cd12df479c261397353c99e6f3e4d870b616382e1b4338bad3ab498a">anunciou o Coracle Hosting&lt;/a> em &lt;a href="https://hosting.coracle.social">hosting.coracle.social&lt;/a>, um serviço de relay de comunidade hospedado que aceita pagamentos lightning recorrentes por NWC ou cartão. O serviço é alimentado por &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>, o frontend de cobrança e provisionamento da Coracle, e &lt;a href="https://gitea.coracle.social/coracle/zooid">zooid&lt;/a>, um runtime de relay que hospeda muitos relays virtuais em uma única máquina. Ambos são open source no gitea auto-hospedado da Coracle. Caravel entrega com integração opcional &lt;a href="https://livekit.io">livekit&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> que operadores podem alternar por relay. Um tier gratuito com limites de contagem de membros permite que operadores avaliem o serviço antes de comprometer detalhes de pagamento.&lt;/p>
&lt;p>Hodlbod é sincero sobre o modelo de negócio: monetizar open source vendendo uma versão hospedada de uma stack que qualquer outra pessoa também pode rodar. O fosso competitivo é a integração &lt;a href="https://flotilla.social">Flotilla&lt;/a>, que é o próximo passo planejado. Flotilla é dona da superfície do usuário, então a opção hospedada servida de dentro da Flotilla se torna o caminho padrão para qualquer usuário que prefira infraestrutura gerenciada. Hodlbod ofereceu adicionar outros operadores Caravel ao seletor de hospedagem alternativa da Flotilla se eles entrarem em contato, mantendo a porta aberta para um mercado de hospedagem federado.&lt;/p>
&lt;p>Caravel se junta a &lt;a href="https://relay.tools">relay.tools&lt;/a> como uma plataforma pública de provisionamento de relay Nostr com tiers de membros pagos. relay.tools precede Caravel e entrega como o serviço criador de relay dominante hoje, com seu próprio diretório de relays de comunidade e fluxos de entrada de membro pago ou moderador. O recurso distintivo do Caravel é a stack coordenada: o runtime de relay (zooid), o frontend de cobrança e provisionamento (Caravel em si), e o seletor do lado cliente (integração Flotilla, ainda em voo) entregam como um design. O outro recurso distintivo é a densidade de muitos-relays-por-processo do zooid, onde relays de clientes compartilham um único processo host para que o operador amortize custos de hospedagem em muitas pequenas comunidades. Este é o mesmo argumento de densidade que tornou hospedagem web compartilhada viável nos anos 2000 iniciais, aplicado à camada de relay do Nostr.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="angor-v0229-e-v0230-padrão-mainnet-e-teste-de-financiamento-uat-de-3-usuários">Angor v0.2.29 e v0.2.30: padrão mainnet e teste de financiamento UAT de 3 usuários&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.29">Angor v0.2.29&lt;/a> em 4 de junho e &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.30">v0.2.30&lt;/a> em 8 de junho são os dois lançamentos desta semana para o protocolo descentralizado de financiamento Bitcoin-e-Nostr. A mudança de destaque da v0.2.30 é o &lt;a href="https://github.com/block-core/angor/pull/893">PR #893&lt;/a>, que muda a rede padrão para mainnet. Angor ainda entrega como um lançamento alpha instável, mas a mudança de padrão-mainnet sinaliza que o protocolo passou da fase apenas-testnet para os clientes desktop e móvel. A v0.2.30 também entrega um fluxo móvel de criar-projeto de único toque com upload de imagem e reset de scroll (&lt;a href="https://github.com/block-core/angor/pull/889">PR #889&lt;/a>) e resolve uma condição de corrida onde o spinner de fatura lightning podia travar (&lt;a href="https://github.com/block-core/angor/pull/890">PR #890&lt;/a>).&lt;/p>
&lt;p>A v0.2.29 adicionou um teste UAT de ponta a ponta no &lt;a href="https://github.com/block-core/angor/pull/881">PR #881&lt;/a> cobrindo envio de fundos de 3 usuários em 10 rodadas com gastos não confirmados, o primeiro teste de fluxo de financiamento multi-usuário na suíte de testes do Angor. O lançamento também adicionou um plano de implementação para um CLI Angor e servidor MCP (&lt;a href="https://github.com/block-core/angor/pull/792">PR #792&lt;/a>), com melhorias no CLI para o fluxo de teste MCP no &lt;a href="https://github.com/block-core/angor/pull/880">PR #880&lt;/a>. O &lt;a href="https://github.com/block-core/angor/pull/885">PR #885&lt;/a> por DavidGershony corrigiu uma fatura lightning Boltz que usava a rede errada após uma troca de rede em runtime, um bug que teria aparecido em produção após o padrão mainnet da v0.2.30. Configurações agora oferecem uma purga opcional de arquivo de carteira de recuperação durante limpeza de dados (&lt;a href="https://github.com/block-core/angor/pull/883">PR #883&lt;/a>).&lt;/p>
&lt;h3 id="sprout-v0315-atualização-de-ttl-de-canal-efêmero-e-comandos-slash-acp">Sprout v0.3.15: atualização de TTL de canal efêmero e 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>, lançado em 10 de junho, é o oitavo lançamento em uma sequência que começou com a v0.3.7 em 2 de junho. Newsletter #25 cobriu a sequência v0.3.1 a v0.3.6 com o trabalho de integração mesh-llm e seções de canal; v0.3.7 até v0.3.15 são a jusante disso, focados em polimento e algumas adições voltadas ao usuário. A mudança mais visível ao usuário é uma atualização de TTL para canais efêmeros no &lt;a href="https://github.com/block/sprout/pull/902">PR #902&lt;/a>: quando um usuário desarquiva um canal efêmero, Sprout estende o time-to-live do canal para que o desarquivamento não re-arquive imediatamente sob o timer de expiração original. Emojis customizados móveis chegam no &lt;a href="https://github.com/block/sprout/pull/906">PR #906&lt;/a> junto com um redesign de configurações, e contagens de reação agora animam em mudança (&lt;a href="https://github.com/block/sprout/pull/904">PR #904&lt;/a>).&lt;/p>
&lt;p>O &lt;a href="https://github.com/block/sprout/pull/905">PR #905&lt;/a> corrige uma lacuna de longa data onde nomes de exibição de múltiplas palavras quebravam e a extração de menção &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> &lt;code>nostr:npub&lt;/code> era silenciosamente dropada. Uma UI de equipe suportada por diretório para desktop entrega no &lt;a href="https://github.com/block/sprout/pull/912">PR #912&lt;/a> com comandos de instalar, sincronizar e revelar. Comandos slash agora passam através para conectores &lt;a href="https://agentclientprotocol.com">ACP&lt;/a> no &lt;a href="https://github.com/block/sprout/pull/919">PR #919&lt;/a>, permitindo que Sprout encaminhe comandos estilo &lt;code>/help&lt;/code> diretamente para runtimes de agente enquanto a UI Sprout fica fora do caminho.&lt;/p>
&lt;h3 id="wisp-v111-integração-com-carteira-spark-e-guarda-de-colagem-nsec">Wisp v1.1.1: integração com carteira Spark e guarda de colagem nsec&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.1">Wisp v1.1.1&lt;/a>, lançado em 5 de junho, entrega uma tela de conexão de carteira de duas camadas com sub-tela &lt;a href="https://www.spark.money">Spark&lt;/a> no &lt;a href="https://github.com/barrydeen/wisp/pull/548">PR #548&lt;/a> e paridade de dashboard com a UI de carteira iOS no &lt;a href="https://github.com/barrydeen/wisp/pull/549">PR #549&lt;/a>. O lançamento inclui uma &lt;a href="https://github.com/barrydeen/wisp/pull/553">guarda de colagem nsec&lt;/a> para todo o sistema que detecta uma colagem prefixada com &lt;code>nsec1&lt;/code> em qualquer lugar do app e bloqueia o campo de aceitá-la, fechando um dos footguns mais citados em UX Nostr. Login com scan de QR mais um modo somente visualização para &lt;code>npub&lt;/code> e &lt;code>nprofile&lt;/code> entrega no &lt;a href="https://github.com/barrydeen/wisp/pull/552">PR #552&lt;/a>, permitindo que um usuário navegue em um perfil somente leitura. Mensagens de Zap agora renderizam como mini-posts na gaveta de engajamento (&lt;a href="https://github.com/barrydeen/wisp/pull/559">PR #559&lt;/a>) para que notas de zap carreguem seu texto ao lado do valor em sats. Um filtro de rede de confiança em respostas de thread entrega no &lt;a href="https://github.com/barrydeen/wisp/pull/583">PR #583&lt;/a>, permitindo que usuários escondam spam de resposta de contas fora do seu grafo de follow.&lt;/p>
&lt;h3 id="nostria-v3146-e-nospeak-113-retrabalho-de-notificações-e-reinicialização-ice">Nostria v3.1.46 e nospeak 1.1.3: retrabalho de notificações e reinicialização 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> em 7 de junho termina uma sequência de três lançamentos que retrabalhou o contador de notificações para contar apenas novas notificações desde a última visualização, eliminando uma inflação de longa data onde carregar notificações antigas através de scroll aumentava a contagem do badge. &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.45">Nostria v3.1.45&lt;/a> corrigiu um bug de pagamento dividido afetando pagamentos lightning e código QR e abandonou uma UI translúcida previamente planejada como inviável no compositor do Android.&lt;/p>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.1.3">nospeak v1.1.3&lt;/a> em 4 de junho adiciona reinicialização ICE em estado FAILED para chamadas de voz 1 para 1. Comportamento WebRTC padrão dropa uma chamada quando candidatos ICE dão timeout sem um caminho alternativo; o caminho de reinicialização ICE renegocia candidatos para que a chamada se recupere de mudanças transitórias de NAT ou rede. Chamadas Android agora mantêm a tela ligada durante chamadas de vídeo.&lt;/p>
&lt;h2 id="mudanças-não-lançadas">Mudanças não lançadas&lt;/h2>
&lt;h3 id="amethyst-41-prs-continuando-a-trilha-nip-32--nip-f4--tor">Amethyst: 41 PRs continuando a trilha NIP-32 / NIP-F4 / Tor&lt;/h3>
&lt;p>Amethyst mesclou 41 PRs esta semana sem cortar uma tag de lançamento, em cima dos 52 PRs da semana passada e do trabalho de rotulagem de hashtag &lt;a href="https://nostrcompass.org/pt/topics/nip-32/">NIP-32&lt;/a> e podcast &lt;a href="https://nostrcompass.org/pt/topics/nip-f4/">NIP-F4&lt;/a> coberto na Newsletter #25. A branch ativa continua a acumular recursos para o próximo lançamento taggeado, camando polimento sobre as adições de destaque da semana passada: descoberta de rotulador de hashtag, tela de podcast, faixas e playlists de música, watchdog de auto-cura Tor, assinantes efêmeros para uploads anônimos, e zaps onchain com filtragem NIP-05. O throughput de PRs do Amethyst permanece o mais alto de qualquer cliente Nostr, e a fila não lançada é o roadmap de facto para o que outros clientes Nostr Android precisarão igualar.&lt;/p>
&lt;h3 id="damus-rastreamento-de-relay-a-partir-de-mensagens-ok-e-changelog-v117">Damus: rastreamento de relay a partir de mensagens OK e changelog v1.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3786">Damus PR #3786&lt;/a>, mesclado em 3 de junho, adiciona mensagens &lt;code>OK&lt;/code> bem-sucedidas de um relay à lista de relays pós-post. Builds anteriores do Damus populavam a lista de relays vistos apenas ao receber uma mensagem genérica do relay, o que significava que um relay que reconheceu o post mas não entregou nenhum evento de volta era invisível para o usuário. A mudança importa para usuários que querem confirmar que seu post chegou no seu relay de outbox preferido. O &lt;a href="https://github.com/damus-io/damus/pull/3796">PR #3796&lt;/a> corrige um ciclo &lt;code>AttributeGraph&lt;/code> na Visualização de Perfil, e o &lt;a href="https://github.com/damus-io/damus/pull/3725">PR #3725&lt;/a> entrega o changelog v1.17 antes do próximo lançamento taggeado.&lt;/p>
&lt;h3 id="shopstr-dupla-publicação-nip-34">Shopstr: dupla publicação NIP-34&lt;/h3>
&lt;p>O &lt;a href="https://relay.ngit.dev/npub1u350hpq840naxzkkle4gmdtvzanfxmjd9m9tytn5355aua7jh2cqgfuw39/shopstr.git">repo shopstr da Shopstr no ngit&lt;/a> foi anunciado no Nostr esta semana como um repo git &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a>, juntando-se aos repos rastreados do ngit. O repo GitHub do cliente da loja permanece a superfície primária de desenvolvimento; o anúncio NIP-34 torna disponível um caminho paralelo de colaboração git-sobre-Nostr. Este é o segundo grande projeto marketplace Nostr a publicar duplamente no NIP-34 depois do &lt;a href="https://relay.ngit.dev/">Mostro&lt;/a>, e continua a migração gradual de metadados de projeto para o transporte git do Nostr.&lt;/p>
&lt;h3 id="hermes-marmot-gateway-de-agente-ia-sobre-mls">Hermes-Marmot: gateway de agente IA sobre MLS&lt;/h3>
&lt;p>&lt;a href="https://github.com/notmandatory/hermes-marmot">hermes-marmot&lt;/a>, um plugin para o &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a>, conecta a superfície de mensagens de um agente IA a grupos &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> (MLS-sobre-Nostr) usando &lt;a href="https://github.com/marmot-protocol/mdk-python">mdk-python&lt;/a>, os bindings Python para o Rust Marmot Development Kit. O plugin permite que um usuário envie DM a um agente IA de qualquer cliente Nostr que fale mensagens MLS kind 445, incluindo o &lt;a href="https://whitenoise.chat">Whitenoise&lt;/a>. DMs de entrada usam desembrulho de gift wrap &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> via bindings Python &lt;a href="https://github.com/rust-nostr/nostr">nostr-sdk&lt;/a>, e welcomes de entrada fluem através de &lt;code>UnwrappedGift.from_gift_wrap&lt;/code> para &lt;code>mdk.process_welcome&lt;/code> e &lt;code>mdk.accept_welcome&lt;/code>. Controle de acesso roda através de &lt;code>MARMOT_ALLOWED_USERS&lt;/code> (uma lista de permissão npub separada por vírgulas) ou &lt;code>MARMOT_ALLOW_ALL_USERS=true&lt;/code> para acesso de dev aberto.&lt;/p>
&lt;p>O repo é novo (última atualização em 27 de maio) e pequeno. Sua significância é arquitetural: é a primeira ponte pública entre um runtime de agente LLM e um canal de mensagens Nostr criptografado com MLS, e o primeiro uso em produção de mdk-python além do próprio Whitenoise. O padrão aponta para comunicação agente-para-agente onde ambos os endpoints seguram chaves MLS e o relay vê apenas o texto cifrado.&lt;/p>
&lt;h2 id="atualizações-nip-e-trabalho-em-specs-de-protocolo">Atualizações NIP e trabalho em specs de protocolo&lt;/h2>
&lt;h3 id="nip-67-dica-de-completude-eose-pr-2317-mesclada">NIP-67 dica de completude EOSE (PR #2317) mesclada&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a> por mattn foi mesclado em 6 de junho, adicionando &lt;a href="https://nostrcompass.org/pt/topics/nip-67/">NIP-67&lt;/a> ao protocolo. O NIP estende a mensagem de relay &lt;code>EOSE&lt;/code> com um terceiro elemento opcional: &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;, &amp;quot;finish&amp;quot;]&lt;/code> sinaliza que todo evento armazenado correspondente ao filtro foi entregue, enquanto um &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;]&lt;/code> nu não carrega alegação de completude. Um relay que omite a dica está dizendo ao cliente que pode haver mais; um relay que omite o anúncio NIP-67 no NIP-11 mantém o comportamento de hoje sob a heurística legada existente. A mudança é retrocompatível em ambas as direções: clientes legados ignoram o elemento de array final, e relays legados o omitem.&lt;/p>
&lt;p>A motivação no spec mesclado é dupla. Primeiro, perda silenciosa de dados: um cliente pede as últimas 500 notas contra um relay com um cap interno de 300 eventos, o relay retorna 300 eventos, e o cliente (usando a heurística padrão &lt;code>received &amp;lt; limit&lt;/code>) conclui que o resultado está completo. As notas de correspondência de 201 até N mais antigas ficam no relay não lidas, com o cliente cego para esse fato. Segundo, viagens de ida e volta obrigatoriamente desperdiçadas: quando um relay limita respostas em 300 eventos, qualquer subscrição que exaure o cap requer um segundo &lt;code>REQ&lt;/code> com &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code> puramente para confirmar completude, mesmo quando o filtro por acaso corresponde exatamente a 300 eventos. Ambos os modos de falha são pagos por cada cliente em cada subscrição com cap exaurido. A dica &lt;code>&amp;quot;finish&amp;quot;&lt;/code> é uma string opcional em uma mensagem existente e elimina ambos os custos.&lt;/p>
&lt;h3 id="extensão-de-autocompletar-nip-50-pr-2357-mesclada">Extensão de autocompletar NIP-50 (PR #2357) mesclada&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> por Alex Gleason foi mesclado em 6 de junho, adicionando um token &lt;code>autocomplete:true/false&lt;/code> à busca &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>. A extensão permite que um cliente marque uma consulta como uma busca typeahead para que o relay use correspondência de prefixo, com busca de texto completo como padrão para consultas sem o token. O relay Ditto o implementa para pacotes de follow, listas, e qualquer evento com uma tag &lt;code>title&lt;/code>, retornando correspondências contra o prefixo do título; o caminho de busca padrão executa pontuação de texto completo. Sem este token, UIs estilo autocompletar não tinham maneira de comunicar a intenção de busca de prefixo e relays tinham que adivinhar da forma da consulta. O token é uma dica por-busca, não uma capacidade de todo o relay, então um relay pode implementá-lo para uma classe de eventos (títulos) sem alegar suporte geral de autocompletar.&lt;/p>
&lt;h3 id="nip-gart-alertas-de-emergência-e-broadcasts-de-localização-pr-2374">NIP-GART alertas de emergência e broadcasts de localização (PR #2374)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2374">PR #2374&lt;/a> por disinqa, aberto em 9 de junho, define um formato de fio de preservação de privacidade no Nostr para alertas de emergência e broadcasts de localização endereçados a um grupo de destinatários confiáveis. O objetivo de design declarado é esconder identidade do remetente, associação ao grupo e payload dos operadores de relay enquanto mantém os eventos seguros contra replay e verificáveis por assinatura de ponta a ponta. Número NIP ainda TBD, proposta em rascunho inicial. Caso de uso é o padrão de alerta de emergência padrão: um usuário sob ameaça transmite um ping de localização que apenas um grupo pré-compartilhado de contatos confiáveis pode descriptografar, com o relay cego para remetente, conjunto de destinatários e payload. Detalhes do formato de fio vivem no PR e provavelmente evoluirão à medida que os mantenedores revisem.&lt;/p>
&lt;h3 id="método-logout-nip-46-pr-2373">Método logout NIP-46 (PR #2373)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a> por hzrd149, aberto em 8 de junho, adiciona um método &lt;code>logout&lt;/code> ao &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> para que um cliente possa dizer a um bunker explicitamente que a sessão terminou. Até agora, a única forma de terminar uma sessão bunker era esperar o timeout da sessão ou parar de usar a conexão, ambos os quais deixam o bunker segurando estado de sessão para um cliente que se foi. A proposta é curta (um novo método) e é o tipo de mudança de manutenção que torna integrações bunker de longa duração mais limpas.&lt;/p>
&lt;h3 id="proposta-híbrida-relay-p2p-nip-95-circulada-como-longform">Proposta híbrida relay-P2P NIP-95 circulada como longform&lt;/h3>
&lt;p>Uma &lt;a href="https://github.com/nostr-protocol/nips">especificação NIP-95&lt;/a> longform circulou como um post &lt;code>kind:30023&lt;/code> do npub &lt;code>91bea5cd9361504c409aaf459516988f68a2fcd482762fd969a7cdc71df4451c&lt;/code> em 4 de junho sob o título &lt;em>Protocolo Híbrido Relay-P2P via WebRTC&lt;/em>. O documento em português define um protocolo relay híbrido peer-to-peer onde clientes Nostr se conectam uns aos outros diretamente via WebRTC para mensagens ao vivo enquanto continuam a usar relays para recuperação de eventos armazenados e entrega offline. O autor explicitamente enquadrou o spec como &amp;ldquo;pronto para LLM&amp;rdquo;, provendo definições de mensagem, fluxos lógicos, esquemas de dados e regras de estado em um nível de detalhe que permite que um modelo IA gere código de cliente ou servidor funcional. A proposta ainda não chegou como um PR NIP; a circulação via &lt;code>kind:30023&lt;/code> é o precursor habitual de um pull request formal nostr-protocol/nips.&lt;/p>
&lt;h3 id="nip-44-v3-pega-um-segundo-assinante-clave-porta-o-spec">NIP-44 v3 pega um segundo assinante: Clave porta o spec&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-06-03-newsletter/#nip-44-v3-amber-implementation-ahead-of-spec">O rollout NIP-44 v3 da Amber v6.2.0 da semana passada&lt;/a> entregou antes de qualquer PR NIPs mesclado, deixando v3 como uma extensão específica da Amber que outros clientes tinham que espelhar para interoperar. Esse enquadramento de implementação única mudou esta semana. &lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>, o assinante remoto NIP-46 iOS baseado em push, entregou uma porta NIP-44 v3 independente em 3 e 4 de junho em oito commits. Primitivos criptográficos entregam em três commits: &lt;a href="https://github.com/DocNR/clave/commit/99ca5a5aacb501d1666c489fcdea30187c7853fa">camada de chaves HKDF + ECDH&lt;/a>, &lt;a href="https://github.com/DocNR/clave/commit/8808cdca54d32b4ae57856bd4b07ed73a45e8e5c">o algoritmo de padding v3&lt;/a>, e uma &lt;a href="https://github.com/DocNR/clave/commit/ae1f506a53cb2c8aa16523540dbe790876c1839e">API pública de nível superior mais Contexto de criptografia&lt;/a>. Em cima desses, a superfície NIP-46 segue no &lt;a href="https://github.com/DocNR/clave/commit/f37aa1afc8368862fc3ebac533408442349bfc38">cabeamento de despacho RPC dentro do LightSigner&lt;/a> e um &lt;a href="https://github.com/DocNR/clave/commit/e51bcb49fc61cfa89b6030d61b203e046aeddb0a">esquema PendingRequest que carrega o contexto v3 (kind mais scope)&lt;/a>, para que o assinante possa registrar para qual kind de evento e caso de uso o payload v3 foi aprovado.&lt;/p>
&lt;p>Clave diverge da Amber na superfície voltada ao usuário. Um &lt;a href="https://github.com/DocNR/clave/commit/0a8b7de63c1f2994a80a66bf139ec519fab12877">esquema de concessão de permissão com tiers de sensibilidade&lt;/a> permite que usuários concedam criptografia v3 para um kind de evento e scope particulares em um nível de sensibilidade escolhido. No primeiro encontro, &lt;a href="https://github.com/DocNR/clave/commit/2cf563cb15b0406f5e8aaa0b4e34b887ff1896a1">prompts de aprovação cientes do contexto v3 com um cartão explicativo de uma vez&lt;/a> introduzem v3 aos usuários. O trabalho está no main e está &lt;a href="https://github.com/DocNR/clave/commit/4bd0c26d7cf308386ef15e5d96ee5673d6db2d4a">cabeado no projeto Xcode&lt;/a> mas não lançado; a build taggeada mais recente é a &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build79">v0.2.0-build79&lt;/a> de 12 de maio.&lt;/p>
&lt;p>Duas implementações independentes entregam NIP-44 v3 em caminhos de produção antes do PR NIPs mesclar, o que fortalece o caso para o formato de fio subjacente que o PR do protocolo formalizará. Testes de interoperabilidade cross-implementação agora se tornam o caminho para a convergência do spec, com a superfície de aprovação Android da Amber e o modelo de tier de sensibilidade iOS da Clave como os dois pontos de referência. Outros assinantes remotos cabeando v3 (o noauth do nsec.app está dormente desde maio de 2025, e outros bunkers não anunciaram trabalho v3) fortaleceriam o consenso ainda mais.&lt;/p>
&lt;h3 id="atividade-nip-34-iris-adota-a-stack-com-um-novo-transporte-hashtree">Atividade NIP-34: Iris adota a stack com um novo transporte hashtree&lt;/h3>
&lt;p>Iris publicou anúncios de repo NIP-34 para &lt;a href="https://njump.me/nevent1qqs8kmy7a9dn5awurlp9q26lsaetl7dc4wauzdl8ww68dzmn09e074gpzfmhxue69uhhgetdwqhxjunfwvh8gmc850du0">&lt;code>hashtree&lt;/code>&lt;/a> em 8 de junho e &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> e &lt;a href="https://njump.me/nevent1qqs0x98hpsv8vmrxvwm2rs9exxttrue5qv5p2n2sqjeylz2kgdmd7tgpzfmhxue69uhhgetdwqhxjunfwvh8gmca8783s">&lt;code>iris-chat-rs&lt;/code>&lt;/a> em 9 de junho, anunciando URLs de clone sob um novo esquema &lt;code>htree://&lt;/code> servido de &lt;code>wss://temp.iris.to&lt;/code>. O transporte hashtree é uma alternativa endereçada por conteúdo aos clones roteados por GRASP, e esses quatro anúncios são seus primeiros usos públicos. Os repos carregam descrições vazias e os detalhes arquiteturais ainda estão emergindo, mas a escolha de publicar via anúncio NIP-34 (sobre um manifesto Iris-interno customizado) sinaliza que Iris está se comprometendo com a stack NIP-34 git-sobre-Nostr mais ampla.&lt;/p>
&lt;h2 id="nip-em-profundidade-nip-67-dica-de-completude-eose">NIP em profundidade: NIP-67 (Dica de Completude EOSE)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-67/">NIP-67&lt;/a> fecha uma das lacunas de correção mais antigas em &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a>. O spec original define &lt;code>EOSE&lt;/code> como o limite entre eventos armazenados e eventos de subscrição ao vivo para um &lt;code>REQ&lt;/code>, mas nunca especificou se o relay tinha terminado de entregar todas as correspondências armazenadas ou tinha parado no meio do caminho por causa de um cap interno. Cada relay impõe um cap por subscrição (comumente 300 a 1000 eventos) independente do &lt;code>limit&lt;/code> do cliente, e clientes não tiveram maneira de observar esse cap.&lt;/p>
&lt;p>A solução alternativa padrão era comparar a contagem recebida contra o &lt;code>limit&lt;/code> solicitado. Se &lt;code>received &amp;lt; limit&lt;/code>, tratar o resultado como completo; caso contrário paginar com &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code>. Ambos os ramos estão quebrados. O ramo &lt;code>received &amp;lt; limit&lt;/code> silenciosamente trunca: um cliente pedindo 500 notas contra um relay capado em 300 vê 300 eventos, conclui que o resultado está completo porque &lt;code>300 &amp;lt; 500&lt;/code>, e nunca busca o resto. Eventos retidos no relay não podem sinalizar &amp;ldquo;mais disponível&amp;rdquo; através de nenhuma mensagem existente. Paginação como o segundo ramo é desperdício: um filtro que corresponde exatamente ao cap requer um segundo &lt;code>REQ&lt;/code> para confirmar completude, retornando zero eventos enquanto consome uma varredura completa de filtro no relay.&lt;/p>
&lt;p>A correção do NIP-67 é uma string opcional na mensagem &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 os eventos armazenados entregues
[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;] // nenhuma alegação de completude
&lt;/code>&lt;/pre>&lt;p>Um relay que anuncia NIP-67 no &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> &lt;code>supported_nips&lt;/code> e emite um &lt;code>EOSE&lt;/code> nu está dizendo ao cliente que há mais. Um relay que omite o anúncio mantém o comportamento de hoje, e o cliente recorre à heurística existente. Clientes legados ignoram o elemento de array final. Compatibilidade retroativa se mantém em ambas as direções, sem novos verbos ou kinds de evento.&lt;/p>
&lt;p>O que torna NIP-67 digno de examinar é o escopo que ele deliberadamente restringe. O spec não define nenhum cursor ou token de paginação, então paginação baseada em &lt;code>until&lt;/code> permanece o mecanismo. Caps de relay ficam onde estão, e o NIP não requer nenhuma exposição deles. NIP-67 preserva o significado de &lt;code>EOSE&lt;/code> como o limite armazenado-para-ao-vivo e apenas adiciona um sinal sim-ou-não no limite: &amp;ldquo;eu tenho mais para você&amp;rdquo; versus &amp;ldquo;isso é tudo&amp;rdquo;. Esta superfície minimalista é por que o PR foi mesclado após um período de revisão relativamente curto para uma extensão NIP-01, e por que mattn nota explicitamente no PR que tradução IA foi usada para o texto em inglês. A mudança é pequena o suficiente para que a incerteza de tradução não importe.&lt;/p>
&lt;p>Exemplo de troca ciente de NIP-67 entre um cliente e um relay que impõe cap. Anúncio NIP-11 do 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>A troca a nível de fio que segue:&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 mensagens EVENT...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;abc&amp;#34;] // sem &amp;#34;finish&amp;#34;: cap atingido, mais disponível
→ [&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 mensagens EVENT...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;def&amp;#34;, &amp;#34;finish&amp;#34;] // explicitamente completo
&lt;/code>&lt;/pre>&lt;p>A resposta de 178 eventos previamente teria disparado um terceiro &lt;code>REQ&lt;/code> para confirmar completude. Com NIP-67 o cliente para ali.&lt;/p>
&lt;p>NIP-67 também é notável como uma emenda NIP-01 chegando com consenso raro. A maioria das mudanças NIP-01 atrai longas threads de debate porque a pequena superfície do protocolo é carga-suporte para cada implementação. NIP-67 mesclou após um período de revisão estendido (aproximadamente sete semanas do aberto ao mesclado), sugerindo que quando uma mudança NIP-01 é pequena o suficiente e o modo de falha é concreto o suficiente (perda silenciosa de dados, viagem de ida e volta desperdiçada obrigatória), os mantenedores do protocolo estão dispostos a estender o vocabulário de mensagem central.&lt;/p>
&lt;h2 id="nip-em-profundidade-nip-50-busca">NIP em profundidade: NIP-50 (Busca)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> define o campo de filtro &lt;code>search&lt;/code> em mensagens &lt;code>REQ&lt;/code>, permitindo que clientes peçam a um relay para filtrar eventos por correspondência de texto completo contra uma string de consulta. O spec base mesclado é deliberadamente minimalista: o campo &lt;code>search&lt;/code> é uma string, cada relay decide sua própria semântica de busca (quais campos são indexados, como pontuação funciona, se stemming se aplica), e relays anunciam suporte NIP-50 em seu documento NIP-11. Clientes controlam o algoritmo de busca apenas através da string de consulta em si.&lt;/p>
&lt;p>Este minimalismo é tanto a força quanto a restrição do NIP-50. A força é que qualquer relay pode implementar busca em qualquer nível de qualidade: uma varredura de substring básica satisfaz o spec, e um relay rodando Elasticsearch ou Meilisearch o satisfaz igualmente. A restrição é que clientes carecem de uma maneira de expressar intenção de busca. Uma UI typeahead de menção de perfil quer correspondência de prefixo contra nomes de exibição; uma busca de conteúdo de texto completo quer pontuação de texto completo tokenizada através do corpo da nota. O mesmo campo &lt;code>search&lt;/code> carrega ambos, e o relay deve adivinhar da forma da consulta.&lt;/p>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> adiciona o primeiro token de extensão NIP-50: &lt;code>autocomplete:true&lt;/code> ou &lt;code>autocomplete:false&lt;/code> embutido na consulta de busca sinaliza qual modo o cliente quer. O relay Ditto implementa o token para pacotes de follow, listas, e qualquer evento com uma tag &lt;code>title&lt;/code>, mudando para correspondência de prefixo quando &lt;code>autocomplete:true&lt;/code> está presente. O token vive inline na consulta (campos de filtro separados ficam intocados), então ele viaja com a string de busca e não requer nenhum bump de protocolo de fio:&lt;/p>
&lt;pre tabindex="0">&lt;code>search: &amp;#34;fiat autocomplete:true&amp;#34;
&lt;/code>&lt;/pre>&lt;p>Dicas em forma de token como esta são como NIP-50 sempre tratou dialetos específicos de relay. Relays já suportavam tokens como &lt;code>language:en&lt;/code> e &lt;code>domain:example.com&lt;/code>. Cada um permanece específico de relay, com cada relay documentando seu próprio dialeto. O PR #2357 do NIP-50 eleva &lt;code>autocomplete&lt;/code> de um token privado de relay para um abençoado pelo spec, pavimentando o caminho para busca ciente de typeahead através de relays.&lt;/p>
&lt;p>Exemplo de &lt;code>REQ&lt;/code> NIP-50 com o token autocomplete, mirando um 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>O REQ real a nível de fio:&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>Um relay que não reconhece o token trata &lt;code>autocomplete:true&lt;/code> como parte da string de busca literal e recorre a correspondência de texto completo, retornando resultados corretos (se classificados diferentemente). A degradação graciosa torna o token seguro para incluir incondicionalmente para clientes que preferem correspondência de prefixo quando disponível.&lt;/p>
&lt;p>A próxima extensão provável do NIP-50 é controle de classificação por-kind: uma dica que diz &amp;ldquo;classificar por &lt;code>created_at&lt;/code> descendente&amp;rdquo; versus a pontuação de relevância padrão. Vários relays já aceitam &lt;code>sort:newest&lt;/code> como um token privado de relay, e o mesmo caminho de elevação que trouxe &lt;code>autocomplete&lt;/code> para o spec se aplica. Busca permanece um dos poucos primitivos Nostr onde relays competem em qualidade de resultado; confiabilidade de entrega é a mesma através de todos os relays conformes. Tokens incrementais permitem que clientes explorem essa competição de qualidade sem forçar relays a entregar um novo spec de peso pesado.&lt;/p></content:encoded></item><item><title>Nostr Compass #25</title><link>https://nostrcompass.org/pt/newsletters/2026-06-03-newsletter/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-06-03-newsletter/</guid><description>&lt;p>Amber 6.2.0 lança criptografia NIP-44 v3 antes da especificação. Mostro traz a fundação para escrow liquidado em Cashu em oito PRs, envolvendo o Cashu Development Kit existente como um segundo backend de liquidação junto com Lightning. NIP-F4 podcasts foi mesclado após 27 meses de debate. fiatjaf abre uma proposta contestada de desacoplamento de chave NIP-17 que reabre o argumento arquitetural bunker-versus-Marmot. Amethyst traz labeling de hashtag NIP-32, uma tela dedicada de podcast e zaps onchain em 52 PRs não lançados.&lt;/p></description><content:encoded>&lt;p>Amber 6.2.0 lança criptografia NIP-44 v3 antes da especificação. Mostro traz a fundação para escrow liquidado em Cashu em oito PRs, envolvendo o Cashu Development Kit existente como um segundo backend de liquidação junto com Lightning. NIP-F4 podcasts foi mesclado após 27 meses de debate. fiatjaf abre uma proposta contestada de desacoplamento de chave NIP-17 que reabre o argumento arquitetural bunker-versus-Marmot. Amethyst traz labeling de hashtag NIP-32, uma tela dedicada de podcast e zaps onchain em 52 PRs não lançados.&lt;/p>
&lt;h2 id="matérias-principais">Matérias principais&lt;/h2>
&lt;h3 id="amber-620-criptografia-nip-44-v3-lançada">Amber 6.2.0: criptografia NIP-44 v3 lançada&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a>, lançado em 1º de junho, adiciona &lt;a href="https://github.com/greenart7c3/Amber/pull/448">suporte a criptografia NIP-44 v3&lt;/a> com uma tela dedicada de aprovação, preview de intent, preview de bunker, log de histórico e auto-rejeição para requisições inválidas. A release também registra &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">autoridades ContentProvider NIP-44 v3&lt;/a> para que outros apps Android possam solicitar criptografia v3 junto com o caminho v2 existente. NIP-44 em si é a especificação de payload criptografado versionada usada por DMs privadas &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>, tráfego bunker NIP-46, e outras primitivas Nostr; v3 no Amber é opt-in junto com v2, sinalizada por um método de signer separado para que clientes do lado receptor possam negociar o algoritmo explicitamente. O PR correspondente nos NIPs ainda não chegou, então o Amber está lançando v3 antes do consenso de protocolo, com o formato de fio e autoridade ContentProvider registrados para integração de cliente downstream.&lt;/p>
&lt;p>Sessões NIP-46 agora auto-aceitam requisições de ping na conexão, removendo o prompt na primeira ida-e-volta após pareamento. O método de signer &lt;code>sign_message&lt;/code> foi removido inteiramente após ter sido descontinuado e não usado.&lt;/p>
&lt;p>Como o Amber é o signer Android dominante, cada cliente downstream que quiser v3 tem que mirar no formato de fio do Amber até o PR dos NIPs chegar. Isso dá ao Amber influência implícita sobre a especificação final v3 até que o protocolo alcance. A troca é real: v3 em produção permite ao Amber coletar feedback de implementação para o eventual NIP, ao custo de um ponto de referência de implementação única temporário que outros clientes agora têm que igualar.&lt;/p>
&lt;h3 id="mostro-integração-de-escrow-cashu-via-cdk">Mostro: integração de escrow Cashu via CDK&lt;/h3>
&lt;p>grunch trouxe oito PRs em MostroP2P esta semana integrando as primitivas P2PK multisig existentes do Cashu (NUT-10 e NUT-11) como um segundo backend de liquidação junto com Lightning no câmbio P2P Bitcoin coordenado por Nostr. As primitivas criptográficas são do Cashu; o trabalho é scaffolding de integração e uma nova 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>, lançado em 30 de maio, adiciona os &lt;a href="https://github.com/MostroP2P/mostro-core/pull/150">tipos de protocolo para escrow multisig 2-de-3&lt;/a>, assinaturas P_M por prova, e permite eventos de escrow através da validação de resposta. A arquitetura está documentada no &lt;a href="https://github.com/MostroP2P/mostro/pull/756">PR #756&lt;/a> e usa chaves de trade por ordem esclarecidas no &lt;a href="https://github.com/MostroP2P/mostro/pull/757">PR #757&lt;/a>.&lt;/p>
&lt;p>A implementação foi lançada em seis PRs subsequentes ao longo de um único dia. &lt;a href="https://github.com/MostroP2P/mostro/pull/758">F2 (PR #758)&lt;/a> adicionou a configuração, o modo de escrow e o boot condicional. A próxima fatia, &lt;a href="https://github.com/MostroP2P/mostro/pull/760">F3 (PR #760)&lt;/a>, definiu uma trait &lt;code>EscrowBackend&lt;/code> com uma implementação Lightning e um stub Cashu, permitindo ao Mostro trocar backends de liquidação sem mudar a máquina de estado de ordem. &lt;a href="https://github.com/MostroP2P/mostro/pull/759">F4 (PR #759)&lt;/a> envolveu o &lt;a href="https://github.com/cashubtc/cdk">CDK&lt;/a> (o Cashu Development Kit) para operações de mint e carteira. Trabalho de banco de dados no &lt;a href="https://github.com/MostroP2P/mostro/pull/761">F5 (PR #761)&lt;/a> adicionou locks de escrow compare-and-swap e queries active-locked. &lt;a href="https://github.com/MostroP2P/mostro/pull/762">F6 (PR #762)&lt;/a> construiu um mint containerizado em um job CI dedicado para teste de escrow ponta-a-ponta. O fluxo do Mostro já usa DMs gift-wrapped NIP-59 para coordenação de ordem sobre o relay, então o escrow Cashu se encaixa como uma segunda opção de liquidação junto com Lightning sem tocar no protocolo de fio.&lt;/p>
&lt;h2 id="releases">Releases&lt;/h2>
&lt;h3 id="ngit-v250-fallback-grasp-e-fetches-git-lazy">ngit v2.5.0: fallback GRASP e fetches git lazy&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.5.0">ngit v2.5.0&lt;/a> muda o comportamento padrão de &lt;code>git push pr/&amp;lt;branch&amp;gt;&lt;/code> e &lt;code>ngit send&lt;/code> para produzir um kind PR para novas propostas quando o repositório tem pelo menos um servidor GRASP registrado. Anteriormente isso só era disparado para commits grandes acima de 60 KB ou commits contendo submódulos. Quando um PR não pode ser empurrado para os servidores GRASP do repositório, ngit agora recorre ao roteamento GRASP-06 através dos servidores declarados. A flag &lt;code>ngit send --git-server&lt;/code> ou &lt;code>git push -o git-server=&amp;lt;url&amp;gt;&lt;/code> permite aos contribuidores mirar em uma URL git customizada ou servidor GRASP explicitamente.&lt;/p>
&lt;p>Republicações &lt;code>ngit init&lt;/code> agora preservam tags desconhecidas de anúncios existentes, para que tags adicionadas por uma versão futura do ngit ou ferramenta de terceiros sobrevivam à republicação. Um aviso amarelo lista as tags carregadas, e &lt;code>--clean&lt;/code> as remove sob demanda. &lt;code>ngit pr apply&lt;/code>, &lt;code>ngit pr checkout&lt;/code> e &lt;code>ngit pr list&lt;/code> consultam servidores git de forma lazy e compartilham um único helper de fetch, para que o checkout não faça mais fetch incondicionalmente quando o commit já está local. &lt;code>ngit pr checkout&lt;/code> também tenta URLs de clone fornecidas pelo submitter do evento PR como fallback quando os servidores git declarados do repo não carregam o tip do PR, correspondendo ao comportamento existente em &lt;code>ngit pr apply&lt;/code>. ngit é a implementação de referência &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> para colaboração git sobre Nostr, e v2.5.0 torna GRASP o caminho de primeira classe para novos contribuidores.&lt;/p>
&lt;h3 id="jumble-v2657-remoção-de-exif-e-contagens-de-zap-validadas">Jumble v26.5.7: remoção de EXIF e contagens de zap validadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.7">Jumble v26.5.7&lt;/a> adiciona duas mudanças que afetam a privacidade do usuário e a integridade de dados diretamente. Localização EXIF e identificadores de câmera agora são removidos de uploads de imagem antes que deixem o cliente, fechando uma superfície de longa data de vazamento de metadados que afetava cada imagem postada do Jumble. Contagens de zap agora são computadas apenas a partir de recibos criptograficamente validados, corrigindo contagens infladas de eventos de zap malformados que haviam permitido a atacantes exagerar totais de zap em notas. A release também adiciona verificação de identidade do remetente para DMs &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>, fechando uma superfície de spoofing onde um remetente podia forjar sua &lt;code>pubkey&lt;/code> no seal.&lt;/p>
&lt;h3 id="nostr-calendar-v160-rsvp-e-tratamento-de-participantes-duplicados">nostr-calendar v1.6.0: RSVP e tratamento de 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> traz o fluxo de RSVP do Formstr (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/169">PR #169&lt;/a>) e evita participantes duplicados em convites de evento (&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/168">PR #168&lt;/a>). A opção &lt;code>waitForAll&lt;/code> na função de publish agora tem padrão false para que a UI não bloqueie em 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> lançou os dois rascunhos de proposta NIP do Formstr para agendamento de compromissos e reservas.&lt;/p>
&lt;h3 id="sprout-036-sprout--mesh-llm-e-seções-de-canal">Sprout 0.3.6: Sprout × mesh-llm e seções 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> é o destaque de uma sequência de seis releases de v0.3.1 a v0.3.6 esta semana. Integração in-process Sprout × mesh-llm chega no &lt;a href="https://github.com/block/sprout/pull/798">PR #798&lt;/a>, permitindo ao Sprout servir e consumir nós mesh-llm através de admissão de relay. Seções de canal definidas pelo usuário sincronizam entre dispositivos via Nostr no &lt;a href="https://github.com/block/sprout/pull/792">PR #792&lt;/a>, e seções de canal chegam ao mobile com sync de relay no &lt;a href="https://github.com/block/sprout/pull/800">PR #800&lt;/a>. Notificações conscientes de thread com controles mutáveis de follow e mute chegam no &lt;a href="https://github.com/block/sprout/pull/761">PR #761&lt;/a>.&lt;/p>
&lt;p>Anexos de tipo de arquivo arbitrário com cards de download chegaram no &lt;a href="https://github.com/block/sprout/pull/810">PR #810&lt;/a>, expandindo o Sprout além de anexos apenas de imagem. Mobile ganhou uma aba de feed social Pulse (&lt;a href="https://github.com/block/sprout/pull/772">PR #772&lt;/a>) e polimento Pulse em superfícies de feed, compose e filter (&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-em-um-framework-de-bot-rust">NostrBotKit v0.5.0: chat de grupo Marmot em um framework de bot Rust&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/Tuxor/NostrBotKit/src/branch/main/CHANGELOG.md">NostrBotKit v0.5.0&lt;/a>, lançado em 24 de maio no Codeberg, adiciona suporte a &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> (MLS-sobre-Nostr, &lt;a href="https://github.com/nostr-protocol/nips/pull/2014">NIP-104&lt;/a>) ao framework de bot Rust auto-hospedado. Quando &lt;code>marmot: true&lt;/code> está definido, o bot publica seus key packages MLS (kind 443, 30443, 10051), aceita convites de grupo automaticamente e escuta mensagens em grupos aos quais aderiu. Dois novos tipos de comando, &lt;code>dm_marmot&lt;/code> e &lt;code>dm_marmot_npub&lt;/code>, permitem aos bots enviar mensagens para grupos Marmot nomeados ou chats Marmot 1:1 via cron jobs ou webhooks. Para evitar loops de feedback com outros bots, bots NostrBotKit só respondem a mensagens explicitamente endereçadas a eles via &lt;code>/command&lt;/code> ou &lt;code>@botname/command&lt;/code>. Anexos criptografados usando MIP-04 são auto-descriptografados e re-uploadados via Blossom ou NIP-96, e o banco de dados de estado MLS é criptografado com uma chave derivada da chave privada do bot. NostrBotKit é o primeiro framework Rust a lançar suporte a bot NIP-104, abrindo implantação de bot criptografado por Marmot para um perfil de operador diferente do caminho TypeScript existente.&lt;/p>
&lt;h3 id="noscrypt-v0114-release-de-biblioteca-de-criptografia-assinada">noscrypt v0.1.14: release de biblioteca de criptografia assinada&lt;/h3>
&lt;p>&lt;a href="https://github.com/vnuge/noscrypt/releases/tag/v0.1.14">noscrypt v0.1.14&lt;/a> é uma release de segurança da biblioteca de criptografia C usada por vários clientes Nostr para primitivas secp256k1, NIP-04 e NIP-44. A release vem com &lt;a href="https://www.vaughnnugent.com/resources/software/modules/noscrypt">downloads assinados por PGP&lt;/a> verificáveis contra a chave pública do mantenedor. Clientes downstream que empacotam noscrypt devem validar a assinatura antes de integrar.&lt;/p>
&lt;h3 id="chama-v130-novo-escrow-p2p-nostr-native-com-fedimint">Chama v1.3.0: novo escrow P2P Nostr-native com Fedimint&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.3.0">Chama v1.3.0&lt;/a>, lançado em 1º de junho, é o destaque de uma sequência de quatro releases para um novo cliente de escrow P2P Nostr-native que usa ecash Fedimint e compartilhamento de segredo Shamir 2-de-3 para liquidação. O projeto está em &lt;a href="https://getchama.app">getchama.app&lt;/a> e roda sem servidor. v1.3.0 introduz &amp;ldquo;heal that sticks&amp;rdquo; (re-broadcast bem-sucedido e healing de trade que sobrevivem a reinicializações de sessão) e correspondência pay-rail, onde Chamas orientados a EUA apresentam trilhos de pagamento dos EUA primeiro. Base de storefront multi-unidade chegou em &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.11">v1.2.11&lt;/a> (schema multi-unidade) e &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.12">v1.2.12&lt;/a> (contador de estoque de storefront + fortalecimento de recuperação nativo de bridge Fedimint). Chama se junta a Mostro e Shopstr na categoria marketplace Nostr, distinguido por sua arquitetura sem servidor e liquidação de escrow baseada em Fedimint.&lt;/p>
&lt;h2 id="mudanças-não-lançadas">Mudanças não lançadas&lt;/h2>
&lt;h3 id="amethyst-labeling-de-hashtag-nip-32-tela-de-podcast-faixas-de-música">Amethyst: labeling de hashtag NIP-32, tela de podcast, faixas de música&lt;/h3>
&lt;p>Amethyst fez merge de 52 PRs e 411 commits esta semana sem cortar uma tag de release. A maior adição funcional é &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a>, que implementa labeling de hashtag &lt;a href="https://nostrcompass.org/pt/topics/nip-32/">NIP-32&lt;/a> e um feed de hashtag baseado em label usando eventos kind 1985 com namespace &lt;code>L&lt;/code> e tags de label &lt;code>l&lt;/code>. Isso substitui o mecanismo frágil de correspondência de texto &lt;code>#tag&lt;/code> por um modelo de descoberta baseado em labeler onde usuários podem seguir npubs de labelers específicos da forma como seguem criadores de conteúdo. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> adiciona uma tela dedicada de podcast com lista de episódios e player inline, chegando dias após o merge da especificação de podcast &lt;a href="https://nostrcompass.org/pt/topics/nip-f4/">NIP-F4&lt;/a>. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3071">PR #3071&lt;/a> adiciona um feed de Software Apps com filtragem de lista de follow, e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3067">PR #3067&lt;/a> adiciona suporte a faixas de música e playlists via conjuntos &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>.&lt;/p>
&lt;p>Signers efêmeros para uploads de post anônimos chegam no &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3123">PR #3123&lt;/a>, permitindo aos usuários postar anonimamente sem expor sua chave de identidade aos serviços de upload. Um watchdog de auto-cura Tor com testes de integração contra Arti v2.3.0 chega no &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3053">PR #3053&lt;/a>, fortalecendo o roteamento Tor do Amethyst durante interrupções transientes de rede. Zaps onchain e um filtro NIP-05 para usuários retornando do Gemini chegam no &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3052">PR #3052&lt;/a>, ampliando a superfície de zap além do Lightning para pagamentos Bitcoin onchain.&lt;/p>
&lt;h3 id="shopstr-validação-de-url-de-preview-opengraph">Shopstr: validação de URL de preview OpenGraph&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/504">PR #504&lt;/a> valida URLs de preview OpenGraph antes de renderizá-las em listagens de marketplace, fechando uma potencial superfície XSS onde vendedores maliciosos podiam embutir conteúdo com script via metadados OG forjados. Lojas hospedadas no Shopstr exibem previews OG para links externos, e URLs não validadas permitiam a um atacante injetar conteúdo arbitrário na UI da loja.&lt;/p>
&lt;h2 id="atualizações-nip-e-trabalho-de-especificação-de-protocolo">Atualizações NIP e trabalho de especificação de protocolo&lt;/h2>
&lt;h3 id="nip-f4-podcasts-mesclado-após-dois-anos">NIP-F4 (Podcasts) mesclado após dois anos&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1093">PR #1093&lt;/a> foi mesclado em 28 de maio, dois anos e três meses após fiatjaf abrir o rascunho original. NIP-F4 define episódios de podcast como eventos kind 54 com tags &lt;code>imeta&lt;/code> para metadados de arquivo de áudio (URL, mime type, código de idioma ISO, URLs de fallback, flag de serviço NIP-96, bitrate, duração), uma tag &lt;code>title&lt;/code>, tags opcionais &lt;code>image&lt;/code> e &lt;code>description&lt;/code>, e tags &lt;code>t&lt;/code> para labels de tópico. A especificação deliberadamente mantém RSS como a fonte de verdade: episódios podem carregar uma tag &lt;code>i&lt;/code> referenciando o GUID de podcast RSS, permitindo aos clientes Nostr linkar para feeds de podcast existentes sem duplicar hospedagem de áudio. O longo debate na thread do PR (com o co-autor do podcast-namespace Dave Jones, Alex Gleason e Mike Terenzio) chegou a um modelo de coexistência onde Nostr fornece a camada social em cima do RSS enquanto RSS mantém a camada de distribuição. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> do Amethyst com tela de podcast chega dias após o merge da especificação, e o trabalho de picker GIF do Jumble também inclui scaffolding inicial de anexo de podcast.&lt;/p>
&lt;h3 id="desacoplamento-de-chave-nip-17-pr-2361">Desacoplamento de chave NIP-17 (PR #2361)&lt;/h3>
&lt;p>fiatjaf abriu &lt;a href="https://github.com/nostr-protocol/nips/pull/2361">PR #2361&lt;/a> em 1º de junho, propondo que NIP-17 separe a chave de identidade da chave de criptografia. Destinatários anunciam sua chave de criptografia em um novo evento kind 10044, e remetentes usam essa chave anunciada (quando presente) para o seal interno do gift-wrap, recorrendo à chave de identidade do destinatário apenas quando o anúncio está ausente. O PR também adiciona uma tag &lt;code>n&lt;/code> ao seal carregando a pubkey de criptografia do remetente, para que receptores possam derivar a chave de conversa correta sem descriptografia por tentativa contra cada chave aposentada. A motivação declarada é UX de bunker: sob o design atual, um usuário bunker deve fazer round-trip de cada DM recebida através do signer para descriptografar, já que a chave de criptografia é a chave de identidade detida pelo signer. Desacoplar permite ao cliente deter a chave de criptografia localmente enquanto mantém a chave de identidade no bunker para assinaturas.&lt;/p>
&lt;p>A proposta atraiu a revisão mais contestada da semana. Cody Tseng (Jumble) a apoia como o caminho mais fácil para interop de DM cross-client. Vitor Pamplona (Amethyst) objeta em dois pontos: adiciona um novo segredo de descriptografia de longa vida fora do bunker, e clientes que não a lançarem falharão silenciosamente em descriptografar mensagens de clientes que lançarem, sem caminho de degradação porque a quebra é na camada do seal. Pamplona argumenta que o problema já é resolvido corretamente pelos key packages e rotação de época do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, e que retroencaixar a separação de chave na especificação base NIP-17 cria o tipo de falha de interop que o Marmot levou dois anos para engenhar em torno. A contra-argumentação do fiatjaf tem três partes: o desacoplamento é opcional por destinatário, a correção n-tag aborda a preocupação de descriptografia por tentativa, e a alternativa é manter a UX de bunker quebrada enquanto o Telegram consome o caso de uso de mensageria. A thread permanece aberta sem uma decisão de merge e é a discussão NIP mais observada do trimestre.&lt;/p>
&lt;h3 id="nip-silent-payments-fluxo-de-pagamento-pr-2362">NIP-Silent Payments fluxo de pagamento (PR #2362)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2362">silentius-satoshi abriu PR #2362&lt;/a> em 1º de junho como companheiro ao rascunho NIP mais amplo &lt;a href="https://github.com/nostr-protocol/nips/pull/2355">Nostr Silent Payments (PR #2355)&lt;/a>. O NIP de fluxo de pagamento define kind 8352 para notificações de recibo de silent payment (entregues via gift wrap &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> para que o link de recibo não seja publicamente observável) e kind 10353 para um cache UTXO criptografado que sincroniza entre dispositivos para a mesma carteira Silent Payments. O par junto permite a um pagador sinalizar um pagamento para um endereço Silent Payments usando primitivas nativas do Nostr sem expor o link on-chain na camada aberta de relay.&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 abriu PR #2364&lt;/a> em 1º de junho como rascunho. Introduz um transporte de árvore de pacotes com três novos kinds endereçáveis: 39078 carrega o manifest, 39079 carrega fatias individuais, e 39080 carrega solicitações de reparo. A especificação define um formato de fio onde arquivos grandes são quebrados em fatias endereçáveis, com manifests descrevendo a árvore de fatias e solicitações de reparo permitindo aos receptores pedir fatias faltantes. Status de rascunho inicial se aplica, e a proposta ainda não atraiu revisão do mantenedor.&lt;/p>
&lt;h3 id="nip-29-espaços-live-de-áudiovídeo-pr-2238">NIP-29 espaços live de áudio/vídeo (PR #2238)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">PR #2238&lt;/a> foi mesclado em 28 de maio, estendendo grupos baseados em relay &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> com suporte a espaço live de áudio e vídeo. Grupos agora podem referenciar uma sessão live-space ativa, permitindo que eventos de atividade live estilo &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a> se ancorem em um contexto de grupo NIP-29.&lt;/p>
&lt;h3 id="nip-71-vídeo-múltiplas-faixas-de-áudio-pr-2255">NIP-71 vídeo múltiplas faixas de áudio (PR #2255)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a> foi mesclado em 28 de maio, adicionando tags &lt;code>imeta&lt;/code> de faixa de áudio a eventos de vídeo NIP-71. O novo formato carrega URL, hash, mime type, tag de idioma (com ISO-639-1 mais flag de versão original), URLs de fallback, sinal de serviço NIP-96, bitrate e duração. Isso habilita streaming apenas de áudio (video podcasts), troca de resolução com áudio estável, múltiplas faixas de idioma, e armazenamento reduzido quando servidores não embutem áudio diretamente em arquivos de vídeo. Clientes devem verificar a disponibilidade de faixa de áudio antes de assumir comportamento de faixa única.&lt;/p>
&lt;h3 id="nip-59-gift-wrap-efêmero-pr-2245">NIP-59 gift wrap efêmero (PR #2245)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> foi mesclado em 28 de maio, adicionando kind 21059 como contraparte efêmera ao gift wrap kind 1059 existente. A semântica corresponde ao wrap NIP-59 padrão mas segue regras de evento efêmero por NIP-01 (relays os descartam após broadcast e não os persistem). Isso permite aos apps escolher persistência baseada em requisitos: indicadores de digitação e pings de presença se beneficiam de efêmero, enquanto histórico de DM precisa de persistência.&lt;/p>
&lt;h3 id="nip-78-kind-específico-de-aplicação-pr-2292">NIP-78 kind específico de aplicação (PR #2292)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2292">PR #2292&lt;/a> foi mesclado em 28 de maio, reclassificando dados específicos de aplicação NIP-78 como um kind endereçável normal, removendo a faixa separada anterior. Isso simplifica a semântica de substituibilidade e alinha NIP-78 com o modelo de evento endereçável usado por outros NIPs de estado de aplicação.&lt;/p>
&lt;h3 id="esclarecimentos-nip-85-pr-2304">Esclarecimentos NIP-85 (PR #2304)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a> foi mesclado em 28 de maio com pequenas melhorias na linguagem em torno de múltiplas chaves e relays por provedor de serviço em Trusted Assertions &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a>, esclarecendo o caminho de rotação de chave de operador para serviços de asserção de relay.&lt;/p>
&lt;h3 id="nip-01-one-liner-de-gerenciamento-de-conexão-de-relay-pr-2307">NIP-01 one-liner de gerenciamento de conexão de relay (PR #2307)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2307">PR #2307&lt;/a> foi mesclado em 28 de maio, adicionando uma única sentença ao NIP-01 sobre como clientes devem lidar com tempos de vida de conexão de relay. A correção aborda uma lacuna de longa data onde clientes divergiam sobre manter conexões WebSocket abertas após fetching, levando a perda silenciosa de mensagem em relays que descartam conexões ociosas.&lt;/p>
&lt;h3 id="nip-c7-restrição-de-chat-kind-9-pr-2310">NIP-C7 restrição de chat kind 9 (PR #2310)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a> foi mesclado em 28 de maio, restringindo views de chat NIP-C7 apenas a mensagens kind 9. Isso separa chat efêmero de posts de linha do tempo kind 1 em clientes que implementam superfícies de chat estilo NIP-C7.&lt;/p>
&lt;h3 id="simplificação-nip-55-pr-2363">Simplificação NIP-55 (PR #2363)&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2363">PR #2363&lt;/a> por greenart7c3, aberto em 1º de junho, simplifica a especificação de aplicação signer Android. Vitor Pamplona aprovou como &amp;ldquo;Looks good&amp;rdquo; e fiatjaf perguntou se está pronto para merge. A mudança pavimenta o caminho para o registro de autoridade ContentProvider NIP-44 v3 que o Amber lançou esta semana.&lt;/p>
&lt;h3 id="nip-44-v3-implementação-amber-antes-da-especificação">NIP-44 v3 (implementação Amber antes da especificação)&lt;/h3>
&lt;p>Amber lançou NIP-44 v3 em v6.2.0 com oito commits implementando o upgrade de criptografia e registro de autoridade ContentProvider, mas o PR de especificação no repositório NIPs ainda não chegou. NIP-44 em si define um formato de payload criptografado versionado usado dentro de eventos assinados; o v2 existente (em produção desde 2024) usa ECDH secp256k1, HKDF, padding, ChaCha20, HMAC-SHA256 e base64. O formato de fio v3 adiciona um novo byte de versão (0x03) antes do nonce, permitindo aos clientes receptores negociar o algoritmo explicitamente. A implementação do Amber inclui auto-rejeição para requisições v3 inválidas, uma tela dedicada de aprovação distinta das aprovações v2, e log de plaintext por direção para o histórico. Até que o PR dos NIPs seja mesclado, v3 permanece como uma extensão específica do Amber. Trate-o como um sinal olhando adiante, não como sinalização estável em todo o protocolo.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-32-labeling">Deep dive de NIP: NIP-32 (Labeling)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-32/">NIP-32&lt;/a> define uma forma estruturada para qualquer ator Nostr rotular eventos, pubkeys, relays, URLs ou tópicos usando eventos endereçáveis kind 1985 com um vocabulário de label com namespace. A especificação introduz duas novas tags: &lt;code>L&lt;/code> denota um namespace de label, e &lt;code>l&lt;/code> denota um label dentro desse namespace. Tags de alvo de label (&lt;code>e&lt;/code>, &lt;code>p&lt;/code>, &lt;code>a&lt;/code>, &lt;code>r&lt;/code> ou &lt;code>t&lt;/code>) especificam o que está sendo rotulado. O requisito de namespace evita que múltiplos sistemas de label colidam: um label &lt;code>spam&lt;/code> em &lt;code>nip28.moderation&lt;/code> carrega semântica diferente de um label &lt;code>spam&lt;/code> em &lt;code>relay-report&lt;/code>.&lt;/p>
&lt;p>A escolha de design que torna o NIP-32 útil além da moderação é que labels são asserções, não verdade a nível de protocolo. Um evento kind 1985 diz apenas que uma pubkey específica rotulou um alvo específico em um namespace específico. O modelo de confiança é delegado ao cliente: cada cliente escolhe quais labelers honrar, quais namespaces ler, e que affordance de UI dar a cada label. A mesma primitiva carrega avisos de conteúdo, atribuição de licença, tags de idioma ISO-639-1 em notas kind 1, tags geográficas ISO-3166-2, classificação de conteúdo, sugestões de moderação distribuída e pontuações de reputação.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a> do Amethyst esta semana é a maior implantação até agora. Adiciona labeling de hashtag através de NIP-32 e um feed de hashtag baseado em label, permitindo aos usuários navegar por labels atribuídos por labelers confiáveis. O mecanismo anterior de correspondência de texto &lt;code>#tag&lt;/code> que originalmente dirigia a descoberta de hashtag no Nostr permanece como fallback para notas não rotuladas. O modelo hashtag-como-label significa que a mesma nota pode ser descobrível sob múltiplos labels atribuídos por labelers diferentes, e usuários podem silenciar ou impulsionar labelers específicos sem afetar as notas subjacentes.&lt;/p>
&lt;p>Auto-labeling também é suportado. Um autor pode anexar tags &lt;code>L&lt;/code> e &lt;code>l&lt;/code> diretamente às suas próprias notas kind 1 para declarar idioma, localização e tópico. Uma nota taggeada &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 e pode ser filtrada por clientes conscientes de idioma sem infraestrutura de labeling de terceiros.&lt;/p>
&lt;p>Exemplo de evento de label NIP-32 rotulando uma nota kind 1 como inglês e atribuindo a ela uma tag de moderação:&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>O rollout do Amethyst combinado com o recente trabalho de Trusted Relay Assertions sugere que NIP-32 está se tornando o substrato padrão para qualquer padrão &amp;ldquo;asserção dirigida pelo usuário sobre um alvo&amp;rdquo; no Nostr. O próximo teste é se labelers em si desenvolvem hierarquias de confiança: se usuários seguirão npubs de labelers específicos da forma como seguem criadores de conteúdo.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-f4-podcasts">Deep dive de NIP: NIP-F4 (Podcasts)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/F4.md">NIP-F4&lt;/a> foi mesclado esta semana, dois anos e três meses após fiatjaf abrir o rascunho original (PR #1093). O prefixo F é numeração hex simples: NIP-F0 até NIP-FF usam o mesmo espaço hex de 1 byte que NIP-0A até NIP-0D, com a faixa hex superior servindo como overflow agora que a faixa decimal 01–99 está enchendo. NIP-F4 define como podcasts publicam episódios e metadados como eventos Nostr enquanto mantêm RSS como uma camada complementar para o próprio arquivo de áudio.&lt;/p>
&lt;p>A escolha arquitetural central é que cada podcast é seu próprio par de chaves Nostr. A especificação abre com isso diretamente: &amp;ldquo;cada podcast é seu próprio par de chaves Nostr&amp;rdquo;. Isso permite aos podcasts combinar sua presença de podcasting com uma presença normal kind 0 / kind 1 de microblogging, e permite a um podcast mudar de propriedade ao longo do tempo através de handover de chave ou assinatura compartilhada estilo MuSig2. Quatro kinds de evento carregam a camada de publicação:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>kind:10154&lt;/code>&lt;/strong>: metadados de podcast substituíveis. Carrega tags &lt;code>title&lt;/code>, &lt;code>image&lt;/code>, &lt;code>description&lt;/code>, &lt;code>website&lt;/code> opcionais, e tags &lt;code>p&lt;/code> opcionais marcando autores com um &lt;code>role&lt;/code> de &lt;code>host&lt;/code>, &lt;code>cohost&lt;/code> ou &lt;code>editor&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10164&lt;/code>&lt;/strong>: contra-reivindicação de autor. O exemplo na especificação usa kind &lt;code>10064&lt;/code> (um typo aberto para correção), mas o cabeçalho e o texto ao redor o identificam como &lt;code>kind:10164&lt;/code>. Usuários listam as pubkeys de podcast que autoriam, para que clientes possam verificar as tags &lt;code>p&lt;/code> em &lt;code>kind:10154&lt;/code> contra uma reivindicação equivalente do suposto autor. Sem isso, um podcast poderia falsamente marcar qualquer um como host.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:54&lt;/code>&lt;/strong>: eventos de episódio autorados pela pubkey do podcast diretamente. Tags incluem &lt;code>title&lt;/code>, &lt;code>image&lt;/code> opcional, &lt;code>description&lt;/code>, e uma ou mais tags &lt;code>audio&lt;/code>. Cada tag &lt;code>audio&lt;/code> é &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>. A especificação nota &amp;ldquo;outros campos importantes a serem especificados aqui depois de mais descoberta&amp;rdquo;, e a forma mesclada é deliberadamente mínima.&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10054&lt;/code>&lt;/strong>: uma lista favoritos-de-podcasts estilo &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>, permitindo aos usuários marcar quais podcasts seguem.&lt;/li>
&lt;/ul>
&lt;p>O debate da thread em torno do merge envolveu o co-autor do 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> e &lt;a href="https://github.com/staab">staab&lt;/a>. Jones argumentou fortemente contra qualquer tentativa de substituir RSS: &amp;ldquo;Foi tentado muitas vezes e sempre falha&amp;rdquo;, citando JSONfeed, XMPP, AMP, API do Twitter e a migração falhada do Spotify. Terenzio reformulou a proposta como uma camada social em cima do RSS, mantendo o próprio RSS como a camada de distribuição. fiatjaf concordou em recuar e deixar a proposta amadurecer: &amp;ldquo;Concordo com tudo que você disse mas ainda acho que podemos consegui-lo, vamos parar aqui por um tempo&amp;rdquo;. Dois anos depois, a especificação mesclada chega mais perto de coexistência do que substituição.&lt;/p>
&lt;p>Três questões de design permanecem explícitas na especificação mesclada:&lt;/p>
&lt;ul>
&lt;li>O typo de &lt;code>kind:10164&lt;/code> (exemplo mostra &lt;code>10064&lt;/code>) precisa ser reconciliado antes que clientes possam interoperar seguramente.&lt;/li>
&lt;li>Descoberta em nível de episódio sem linking RSS GUID é deixado aberto. A especificação mesclada não tem tag &lt;code>i&lt;/code>, formato &lt;code>podcast:item:guid&lt;/code>, e mecanismo de bridging RSS. Clientes que querem ponte um catálogo RSS existente em eventos kind 54 devem definir a convenção de ponte eles mesmos.&lt;/li>
&lt;li>O stub &amp;ldquo;outros campos importantes&amp;rdquo; na definição de &lt;code>kind:54&lt;/code> deixa bitrate, duração, idioma, ponteiros de transcrição, capítulos e metadados por segmento como território aberto para propostas de acompanhamento.&lt;/li>
&lt;/ul>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> do Amethyst traz uma tela dedicada de podcast com lista de episódios e player inline dias após o merge, a primeira grande implementação de cliente. Jumble lançou scaffolding inicial de anexo de podcast junto com seu picker GIF. Wavlake permanece a maior plataforma de podcast Nostr-native e precisará decidir se alinha seus eventos existentes de faixa de música kind 31337 com o modelo de episódio kind 54 do NIP-F4.&lt;/p>
&lt;p>Exemplo de evento de episódio NIP-F4 kind 54, correspondendo ao conjunto mínimo de tags da especificação mesclada:&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;Episódio 42: Por que RSS venceu&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 e fiatjaf sobre coexistência de protocolo e a camada social.&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;Neste episódio discutimos a jornada de dois anos do NIP-F4 do rascunho ao merge, e por que a coexistência com RSS acabou sendo a escolha arquitetural correta.&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>O PR #1093 esteve aberto por 27 meses, bem acima da duração mediana aberta para PRs de NIP mesclados. O próximo teste para NIP-F4 é se o typo de kind 10164 é reconciliado, se convenções de descoberta de episódio e ponte RSS emergem dos implementadores, e se os principais hosts de podcast publicam sob pares de chaves por-podcast como a especificação recomenda.&lt;/p></content:encoded></item><item><title>Nostr Compass #24</title><link>https://nostrcompass.org/pt/newsletters/2026-05-28-newsletter/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-05-28-newsletter/</guid><description>&lt;p>Amethyst v1.11.0 traz uma implementação completa de calendário NIP-52 com lembretes, splits de zap Bitcoin on-chain e suporte a respostas em grupos Marmot. White Noise v2026.5.22 lança notificações push no iOS através de uma Notification Service Extension, junto com UX de bloqueio e um botão para adicionar membros. Vector v0.4.0 traz uma reescrita completa do vector-core, Tor com um clique e bridges, signers remotos NIP-46, sincronização de grupos MLS com negentropy completo, e um servidor MCP de 21 ferramentas para agentes de IA. Applesauce v6.1.0 introduz listas de relay de lookup NIP-51 (kind 10086) e um conjunto completo de factories git-cast NIP-34. MDK adiciona mensagens efêmeras NIP-40 entre iOS e Android através de uma superfície UniFFI unificada, e Mostro v0.17.4 fecha o loop de bond anti-abuso com payouts Fase 3 de bonds slashed para o vencedor. Notedeck faz merge de reconciliação negentropy NIP-77 completa para giftwraps e backfill de threads, Cordn surge como um messenger MLS mediado por coordenador que troca uma dependência de disponibilidade de ponto único por ordenação de época mais rígida e um modelo operacional mais simples, uma implementação de referência NIP-B0 chamada deepmarks lança um cliente de bookmarks monetizado por curador, e a equipe do Formstr abre quatro propostas coordenadas de NIP de calendário cobrindo auto-remoção de participantes, eventos privados, recorrência e agendamento descentralizado de compromissos.&lt;/p></description><content:encoded>&lt;p>Amethyst v1.11.0 traz uma implementação completa de calendário NIP-52 com lembretes, splits de zap Bitcoin on-chain e suporte a respostas em grupos Marmot. White Noise v2026.5.22 lança notificações push no iOS através de uma Notification Service Extension, junto com UX de bloqueio e um botão para adicionar membros. Vector v0.4.0 traz uma reescrita completa do vector-core, Tor com um clique e bridges, signers remotos NIP-46, sincronização de grupos MLS com negentropy completo, e um servidor MCP de 21 ferramentas para agentes de IA. Applesauce v6.1.0 introduz listas de relay de lookup NIP-51 (kind 10086) e um conjunto completo de factories git-cast NIP-34. MDK adiciona mensagens efêmeras NIP-40 entre iOS e Android através de uma superfície UniFFI unificada, e Mostro v0.17.4 fecha o loop de bond anti-abuso com payouts Fase 3 de bonds slashed para o vencedor. Notedeck faz merge de reconciliação negentropy NIP-77 completa para giftwraps e backfill de threads, Cordn surge como um messenger MLS mediado por coordenador que troca uma dependência de disponibilidade de ponto único por ordenação de época mais rígida e um modelo operacional mais simples, uma implementação de referência NIP-B0 chamada deepmarks lança um cliente de bookmarks monetizado por curador, e a equipe do Formstr abre quatro propostas coordenadas de NIP de calendário cobrindo auto-remoção de participantes, eventos privados, recorrência e agendamento descentralizado de compromissos.&lt;/p>
&lt;h2 id="matérias-principais">Matérias principais&lt;/h2>
&lt;h3 id="amethyst-v1110-calendários-splits-de-zap-on-chain-e-respostas-no-marmot">Amethyst v1.11.0: calendários, splits de zap on-chain e respostas no Marmot&lt;/h3>
&lt;p>Amethyst, o cliente Nostr para Android mantido por Vitor Pamplona, lançou &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> adiciona uma implementação de evento de calendário &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> com uma UI dedicada e um sistema de lembretes, para que eventos de calendário agora sejam renderizados em sua própria categoria de linha do tempo, separada da visualização long-form genérica de kind-30023. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3018">PR #3018&lt;/a> estende zaps Bitcoin on-chain com suporte a splits, distribuindo uma única transação Bitcoin entre múltiplos destinatários conforme a tag zap-split existente, para que um pagamento on-chain se comporte da mesma forma que um split Lightning. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a> adiciona uma tela paginada de histórico de transações on-chain que apresenta cada zap liquidado com status de confirmação de bloco.&lt;/p>
&lt;p>Mensageria de grupo ganha paridade com chat um-para-um: &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2995">PR #2995&lt;/a> adiciona suporte a respostas para mensagens de grupo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>/MLS, para que threads dentro de grupos criptografados agora sejam renderizados com a mesma UI de referência de pai que notas públicas. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2984">PR #2984&lt;/a> fortalece a validação de recibo de zap &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> verificando se o provedor LNURL corresponde ao lud16 declarado do destinatário, fechando uma classe de falsificação onde um LNURL de terceiros poderia forjar um recibo para um pagamento que nunca chegou. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2968">PR #2968&lt;/a> aceita dimensões de ponto flutuante em tags &lt;code>imeta&lt;/code> &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a>, alinhando o Amethyst com clientes que publicam valores de densidade de pixel fracionários de dispositivos como o display Retina do iPhone. A release também conecta Payment Targets, uma nova pote de gorjetas multi-trilho de evento substituível coberto na seção de protocolo abaixo.&lt;/p>
&lt;h3 id="white-noise-v2026522-push-no-ios-ux-de-bloqueio-e-adicionar-membros">White Noise v2026.5.22: push no iOS, UX de bloqueio e adicionar membros&lt;/h3>
&lt;p>White Noise, o messenger de grupo do protocolo Marmot, lançou &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">v2026.5.22&lt;/a> com notificações push no iOS como recurso em destaque. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/673">PR #673&lt;/a> implementa uma iOS Notification Service Extension (NSE) que descriptografa mensagens MLS dentro do processo de extensão e as apresenta como notificações do sistema, para que usuários de iPhone não precisem mais ter o app em primeiro plano para receber mensagens. A infraestrutura de push-token do Android é roteada através do mesmo pipeline de backend, com a NSE por plataforma mantendo ciphertext fora do broker.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/676">PR #676&lt;/a> adiciona uma UX completa de bloqueio e desbloqueio com fluxos de confirmação e filtragem de lista de contatos. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/679">PR #679&lt;/a> adiciona o botão há muito solicitado &amp;ldquo;Add members&amp;rdquo; à tela de info do grupo, fechando uma lacuna de UX onde admins de grupo tinham que recorrer a links de compartilhamento. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/688">PR #688&lt;/a> introduz uma tela dedicada de configurações de notificação para iOS, e &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/687">PR #687&lt;/a> conecta compartilhamento via toque longo para mídia e mensagens.&lt;/p>
&lt;h3 id="mdk-adiciona-mensagens-efêmeras-nip-40-entre-plataformas">MDK adiciona mensagens efêmeras NIP-40 entre plataformas&lt;/h3>
&lt;p>O Marmot Development Kit, o core Rust compartilhado usado por White Noise iOS, White Noise Android, e qualquer cliente Marmot futuro, mesclou &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> para expor validação de mensagens efêmeras e tratamento de expiração &lt;a href="https://nostrcompass.org/pt/topics/nip-40/">NIP-40&lt;/a> através da ponte UniFFI. O PR é o segundo de uma série de três partes. iOS e Android agora compartilham uma implementação Rust da lógica de expiração; as regras de temporização vivem em um único caminho de código auditado consumido por ambas as plataformas via UniFFI. &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> limita o comprimento armazenado dos motivos de falha de welcome e os sanitiza antes da persistência, uma passagem de fortalecimento separada que complementa o tratamento de eventos de welcome lançado na semana passada.&lt;/p>
&lt;p>Mensagens efêmeras em MLS não são apenas uma comodidade de UI. A tag de expiração é publicada com o envelope de mensagem criptografada, então um destinatário que nunca abre a mensagem ainda tem o ciphertext subjacente expirando na camada de relay junto com qualquer cópia em cache no cliente receptor. Com o MDK detendo o caminho de validação, o comportamento permanece consistente entre clientes: qualquer implementação Marmot conforme impõe a mesma semântica de expiração, então um cliente honrando a expiração enquanto outro faz cache para sempre deixa de ser um risco de portabilidade.&lt;/p>
&lt;h3 id="mostro-v0174-fase-3-fecha-o-loop-de-bond-slashed">Mostro v0.17.4: Fase 3 fecha o loop de bond slashed&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, o protocolo de câmbio Bitcoin peer-to-peer construído no Nostr, lançou a Fase 3 de seu rollout de bond anti-abuso em &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> traz o fluxo de payout para bonds slashed, pegando o colateral perdido do perdedor e distribuindo-o para o vencedor da disputa. &lt;a href="https://github.com/MostroP2P/mostro/pull/743">PR #743&lt;/a> adiciona a Fase 3.5, uma mensagem explícita de confirmação de payout para o vencedor para que ele saiba que os sats slashed foram liquidados, com o evento de confirmação chegando na mesma sessão Nostr da resolução de disputa. A Fase 2, coberta na semana passada, introduziu slashing como uma ação de admin; a Fase 3 é a diferença entre ameaçar uma penalidade e aplicá-la.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/746">PR #746&lt;/a> permite ao daemon finalizar disputas que não têm uma linha de solver, um caso de borda que anteriormente travava a resolução em disputas legadas. &lt;a href="https://github.com/MostroP2P/mostro/pull/748">PR #748&lt;/a> tolera taxas nulas na resposta &lt;code>/exrates/BTC&lt;/code> do Yadio para que uma breve interrupção no Yadio não quebre mais o caminho de conversão fiat do Mostro. &lt;a href="https://github.com/MostroP2P/mostro/pull/745">PR #745&lt;/a> documenta a especificação para provedores de preço multi-fonte, a base para remover o Yadio como um ponto único de falha. O cliente mobile do Mostro conectou o caminho de claim correspondente da Fase 3 no &lt;a href="https://github.com/MostroP2P/mobile/pull/596">PR #596&lt;/a>.&lt;/p>
&lt;h3 id="applesauce-v610-relays-de-lookup-e-git-casts-nip-34">Applesauce v6.1.0: relays de lookup e git casts NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a>, o toolkit Nostr modular que alimenta a stack de Coracle, noStrudel e Pablo F7z, lançou &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.1.0">v6.1.0&lt;/a> em seus pacotes. A release adiciona suporte de primeira classe a listas de relay de lookup &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>: eventos kind 10086 permitem que um usuário sinalize &amp;ldquo;pergunte a esses relays se quiser me encontrar&amp;rdquo;, ficando ao lado de listas de outbox &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> como uma primitiva de descoberta. Aplicações construídas em &lt;code>applesauce-core&lt;/code> obtêm um observável reativo &lt;code>User.lookupRelays$&lt;/code> e um loader correspondente em &lt;code>applesauce-relay&lt;/code>.&lt;/p>
&lt;p>Factories git-cast &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> chegam em &lt;code>applesauce-factory&lt;/code>, dando a cada cliente construído em Applesauce um caminho de uma linha para publicar anúncios de repositório (kind 30617), patches (kind 1617) e issues (kind 1621). Propriedades reativas &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code> e &lt;code>User.graspServers$&lt;/code> permitem que aplicações listem repos seguidos por um usuário, mantenedores de repo e servidores GRASP configurados diretamente do mesmo objeto User. A release também corrige métodos manuais de pool que silenciosamente descartavam relays offline no &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a>.&lt;/p>
&lt;h3 id="notedeck-faz-merge-de-negentropy-nip-77-para-giftwraps-e-backfill-de-threads">Notedeck faz merge de negentropy NIP-77 para giftwraps e backfill de threads&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop nativo multi-coluna do Damus, mesclou &lt;a href="https://github.com/damus-io/notedeck/pull/1459">PR #1459&lt;/a> em 25 de maio para conectar reconciliação negentropy &lt;a href="https://nostrcompass.org/pt/topics/nip-77/">NIP-77&lt;/a> completa ao caminho de outbox compartilhado. O PR adiciona frames de cliente e relay NIP-77, sessões negentropy relay-local, e um rastreador de histórico completo de outbox que dirige reconciliação de conjunto local e buscas de eventos faltantes. Giftwraps de mensagens obtêm reconciliação negentropy para que envelopes de mensagem privada possam ser recuperados dos relays de leitura da conta selecionada. Visualizações de thread não são mais limitadas pelo limite de resposta de assinatura ao vivo. Dave PNS substitui sua implementação negentropy local do Dave pelo caminho de outbox compartilhado enquanto preserva seu comportamento existente de histórico limitado.&lt;/p>
&lt;p>Assinaturas ao vivo e negentropy agora usam filtros separados. Um fluxo pode manter uma pequena solicitação ao vivo enquanto emite um filtro negentropy mais amplo para reconciliar o que o relay já tem. O PR intencionalmente não habilita sync negentropy amplo para linhas do tempo home ou perfil, o que mudaria características de custo de cold-start. Cobertura de teste foi adicionada para reconciliação, entrega de giftwrap, backfill de thread, restauração Dave PNS, troca de conta, redirecionamento de relay, retries de fetch e comportamento de relay NIP-77.&lt;/p>
&lt;h3 id="vector-v040-reescrita-do-vector-core-tor-nip-46-mls-com-negentropy-completo-e-uma-superfície-de-agente-mcp">Vector v0.4.0: reescrita do vector-core, Tor, NIP-46, MLS com negentropy completo, e uma superfície de agente MCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, o messenger cross-platform focado em privacidade construído em DMs NIP-17 e grupos Marmot, lançou &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">v0.4.0&lt;/a> como sua maior release até hoje. O destaque é uma reescrita completa do motor: toda a lógica do Vector agora vive em uma única crate desacoplada, &lt;code>vector-core&lt;/code>, compartilhada entre desktop, Android e qualquer cliente futuro, com mais de 440 testes no próprio core e a shell da aplicação com milhares de linhas removidas. A reescrita é a base para um CLI do Vector, bots e SDKs que dirigem o mesmo código de protocolo que a GUI.&lt;/p>
&lt;p>Integração com Tor vem com roteamento de tráfego com um clique e suporte a bridge para contornar censura. Suporte multi-conta chega com um switcher in-app. Login com signer remoto chega via &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> com pareamento bunker por QR ou URI colada, para que usuários possam fazer login sem nunca expor sua nsec. Delete-for-everyone funciona tanto em DMs &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> quanto em chats de grupo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, com o Vector mantendo a chave efêmera de assinatura como uma divergência deliberada da especificação que as notas de release destacam explicitamente: &amp;ldquo;um desvio das especificações tradicionais NIP-17/Marmot para controles aprimorados de privacidade do usuário.&amp;rdquo; A chave efêmera retida dá aos clientes Vector prova local de que uma exclusão foi sancionada pelo remetente original, mas também significa que qualquer outro cliente que toque no Vector vê uma superfície de verificabilidade de exclusão diferente dos clientes NIP-17/Marmot de referência.&lt;/p>
&lt;p>Sync de grupo MLS agora é totalmente reconciliado sobre negentropy &lt;a href="https://nostrcompass.org/pt/topics/nip-77/">NIP-77&lt;/a>, a mesma direção que o Notedeck tomou para giftwraps e threads esta semana. O uploader Blossom faz failover entre múltiplos servidores, aprende as capacidades de cada servidor e sincroniza a lista de servidores entre dispositivos. Pacotes de emoji customizados são criáveis pelo usuário, compartilháveis e cross-compatíveis com outros clientes Nostr. A memória SQLite caiu de aproximadamente 308MB para 5MB. O painel de emoji abre a partir de cache em disco e shortcodes estilo Discord (&lt;code>:smile:&lt;/code>) mais ranking de frequência Unicode apresentam o glifo certo primeiro.&lt;/p>
&lt;p>A adição mais nova é &lt;code>vector-agent&lt;/code>, um servidor MCP (Model Context Protocol) que expõe 21 ferramentas para que agentes de IA possam dirigir o Vector: enviando DMs, gerenciando grupos, fazendo upload de arquivos, editando perfis. Este é o segundo projeto Nostr esta semana (junto com o Shopstr) a lançar uma superfície MCP, e a primeira aplicação de classe messenger a fazê-lo. Combinado com o AgentNoise (coberto na semana passada), o padrão de clientes Nostr controlados por agente está passando de experimentos pontuais para uma direção deliberada de plataforma.&lt;/p>
&lt;h3 id="cordn-aparece-como-um-messenger-mls-mediado-por-coordenador">Cordn aparece como um messenger MLS mediado por coordenador&lt;/h3>
&lt;p>&lt;a href="https://cordn.net">Cordn&lt;/a> (cliente web em &lt;a href="https://cordn.net">cordn.net&lt;/a>, repos em &lt;a href="https://github.com/Cordn-msg/cordn">Cordn-msg/cordn&lt;/a> e &lt;a href="https://github.com/Cordn-msg/cordn-web">Cordn-msg/cordn-web&lt;/a>) é um novo messenger MLS que adota uma abordagem arquitetural diferente do Marmot. Onde o &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> é totalmente baseado em relay sem coordenador privilegiado (cada membro do grupo escreve diretamente para relays e qualquer relay conforme pode carregar o tráfego), o Cordn introduz um papel de coordenador por grupo implementado como um serviço &lt;a href="https://nostrcompass.org/pt/topics/contextvm/">ContextVM&lt;/a>. O coordenador ordena commits MLS e lida com distribuição de welcome.&lt;/p>
&lt;p>O argumento do Cordn, declarado em sua página &lt;a href="https://cordn.net/why">/why&lt;/a>, é que MLS como implantado em messengers de produção &amp;ldquo;não é livre de coordenação&amp;rdquo; e que &amp;ldquo;disseminação pública fracamente ordenada&amp;rdquo; torna a convergência de estado de grupo &amp;ldquo;muito mais difícil&amp;rdquo; sem um ponto forte de coordenação. Um design mediado por coordenador fornece avanço de época previsível e resolução mais simples de commits concorrentes. Participantes se conectam ao coordenador usando chaves efêmeras, então o coordenador aprende o ID do grupo e o timing do tráfego de commit mas não quais pubkeys de longo prazo são membros. Qualquer parte consultando relays para um grupo Marmot já pode ver a mesma superfície: atividade de grupo por ID de grupo, com timing inferível pela chegada de eventos. Cordn também reconhece que &amp;ldquo;confiança de disponibilidade permanece&amp;rdquo; com auto-hospedagem: um coordenador auto-hospedado evita a preocupação de centralização na camada do operador mas introduz um ponto único de falha para a liveness do grupo. Marmot evita esse ponto único deixando a ordenação para o próprio MLS (épocas e mensagens Commit lidam com ordenação dentro do protocolo) e distribuindo eventos Welcome via gift wrap &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>, ao custo de disciplina do lado do admin: admins devem esperar pelo reconhecimento do relay de um Commit antes de enviar o Welcome correspondente, e clientes devem reconciliar commits concorrentes quando a entrega do relay compete com uma transição de estado.&lt;/p>
&lt;p>O contraste vale a pena examinar para qualquer equipe escolhendo uma stack de mensageria privada. Marmot troca alguma complexidade de implementação por uma implantação agnóstica a relay sem ator privilegiado no caminho. Cordn troca uma dependência de disponibilidade de ponto único por ordenação mais apertada e um modelo operacional mais simples. Ambos os projetos são construídos em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> e usam Nostr como camada de identidade e transporte. A discordância é sobre onde vive o custo de coordenação. Os repos cordn-msg mostram cadência estável de commits com o serviço coordenador implementado sobre ContextVM e a camada MLS construída em &lt;code>ts-mls&lt;/code>.&lt;/p>
&lt;h3 id="deepmarks-bookmarks-nip-b0-com-publicação-monetizada-por-curador">deepmarks: bookmarks NIP-B0 com publicação monetizada por curador&lt;/h3>
&lt;p>&lt;a href="https://github.com/ostermayer/deepmarks-public">deepmarks-public&lt;/a> é um cliente de referência para a especificação de bookmark proposta &lt;a href="https://nostrcompass.org/pt/topics/nip-b0/">NIP-B0&lt;/a> (kind 39701), com uma arquitetura de três caixas (curador, indexador, visualizador) e um sistema de níveis financiado por zaps &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> diretos ao curador. O cliente implementa NIP-B0, &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, NIP-57, &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-98/">NIP-98&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e Blossom BUD-01 e BUD-04 para armazenamento de arquivo. Um nível vitalício de 21.000 sats converte leitores pagantes em destinatários recorrentes de zap para o curador. O curador publica eventos de bookmark, o indexador os enriquece com metadados legíveis por máquina e o visualizador renderiza o feed; cada papel é um serviço implantável separado.&lt;/p>
&lt;h2 id="releases">Releases&lt;/h2>
&lt;h3 id="amber-v610-ga-backup-criptografado-por-conta">Amber v6.1.0 GA: backup criptografado por conta&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> passou de &lt;code>v6.1.0-pre3&lt;/code> para 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> lança backup e restore criptografados para o banco de dados de permissões de aplicação, e &lt;a href="https://github.com/greenart7c3/Amber/pull/446">PR #446&lt;/a> divide o backup por conta, para que usuários com múltiplas identidades Nostr possam fazer backup e restaurar cada conjunto de grants de app independentemente. O trabalho de assinatura PSBT coberto na semana passada está no corte GA.&lt;/p>
&lt;h3 id="citrine-assinaturas-por-relay-e-prevenção-de-vazamento-de-url-onion">Citrine: assinaturas por relay e prevenção de vazamento de URL onion&lt;/h3>
&lt;p>&lt;strong>Citrine&lt;/strong>, o relay pessoal no dispositivo que vem com o Amethyst, lançou duas correções neste ciclo. &lt;a href="https://github.com/greenart7c3/Citrine/pull/157">PR #157&lt;/a> alterna de uma única assinatura global para assinaturas taggeadas por relay, para que dois relays de origem compartilhando um filtro &lt;code>kinds: [1]&lt;/code> não colidam mais no lado do agregador. &lt;a href="https://github.com/greenart7c3/Citrine/pull/162">PR #162&lt;/a> filtra URLs de relay onion quando o proxy Tor de saída está desabilitado, evitando que endereços onion vazem para o caminho de roteamento clearnet.&lt;/p>
&lt;h3 id="angor-v0227-e-v0228-confiabilidade-de-relay-e-reconexão-boltz">Angor v0.2.27 e v0.2.28: confiabilidade de relay e reconexão Boltz&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong> lançou &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.27">v0.2.27&lt;/a> e &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 um bug de dedup de relay onde apenas um relay estava conectado por vez, uma regressão que silenciosamente degradava a confiabilidade para projetos com múltiplos endpoints de relay. &lt;a href="https://github.com/block-core/angor/pull/876">PR #876&lt;/a> adiciona lógica de reconexão WebSocket para monitoramento de submarine-swap Boltz, para que uma breve desconexão não deixe mais um swap em estado desconhecido.&lt;/p>
&lt;h3 id="nostrord-v110-zaps-nip-57-e-distinção-de-papéis-nip-29">Nostrord v1.1.0: zaps NIP-57 e distinção de papéis NIP-29&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> lançou &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.1.0">v1.1.0&lt;/a> com suporte a zaps Lightning &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> para mensagens e perfis (&lt;a href="https://github.com/nostrord/nostrord/pull/98">PR #98&lt;/a>) e uma distinção adequada no feed de atividade entre mudanças de papel &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> e adições de membro (&lt;a href="https://github.com/nostrord/nostrord/pull/92">PR #92&lt;/a>), que costumavam renderizar identicamente e obscureciam quem havia sido promovido versus quem havia sido convidado.&lt;/p>
&lt;h3 id="ぬるぬる-v15x-keystore-mls-sqlcipher-e-catch-up-de-época">ぬるぬる v1.5.x: keystore MLS SQLCipher e catch-up de época&lt;/h3>
&lt;p>&lt;strong>ぬるぬる&lt;/strong> (nurunuru, por tami1A84), um cliente Nostr em japonês que implementa mensageria de grupo MLS (kind 443) junto com NIP-44, busca avançada NIP-50, NIP-55 e NIP-70, lançou cinco releases esta semana. &lt;a href="https://github.com/tami1A84/null--nostr/pull/184">PR #184&lt;/a> introduz criptografia SQLCipher para o keystore MLS na camada rust-engine. &lt;a href="https://github.com/tami1A84/null--nostr/pull/187">PR #187&lt;/a> e &lt;a href="https://github.com/tami1A84/null--nostr/pull/188">PR #188&lt;/a> estendem SQLCipher para Android e iOS respectivamente, com uma etapa de purga de plaintext legacy e guards de CI. &lt;a href="https://github.com/tami1A84/null--nostr/pull/189">PR #189&lt;/a> e &lt;a href="https://github.com/tami1A84/null--nostr/pull/191">PR #191&lt;/a> adicionam catch-up de época de par MLS com um cache de replay e um banner de recuperação em ambas as plataformas, para que um cliente que fica para trás em commits de grupo possa se recuperar sem perder a conversa. ぬるぬる é um cliente Marmot construído em &lt;code>mdk-core&lt;/code>, &lt;code>mdk-sqlite-storage&lt;/code> e &lt;code>mdk-storage-traits&lt;/code> de &lt;code>marmot-protocol/mdk&lt;/code>, então o trabalho SQLCipher e catch-up de época chega dentro do mesmo runtime MDK que o White Noise usa.&lt;/p>
&lt;h3 id="bitcredit-core-v0510-correção-de-propagação-de-bloco-com-raiz-nostr">Bitcredit Core v0.5.10: correção de propagação de bloco com raiz Nostr&lt;/h3>
&lt;p>&lt;strong>Bitcredit Core&lt;/strong> lançou &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.10">v0.5.10&lt;/a> com uma correção para um campo Nostr-node-id ausente durante propagação de bloco, que estava quebrando fluxos de criação de empresa que incluíam upload de identidade. Bitcredit é um protocolo de e-bill que usa identidades Nostr como raiz de confiança para eventos de propagação de empresa e bill.&lt;/p>
&lt;h2 id="mudanças-não-lançadas">Mudanças não lançadas&lt;/h2>
&lt;p>&lt;strong>Jumble&lt;/strong> abriu &lt;a href="https://github.com/CodyTseng/jumble/pull/797">PR #797&lt;/a> para login Google via o signer de threshold Pomegranate, permitindo a um usuário dividir sua chave Nostr entre múltiplas partes para que nenhum signer único detenha o segredo completo. Este é um passo significativo além dos fluxos bunker ou nsec-import: um usuário pode recuperar sua conta mesmo se uma parte signer for comprometida, sem que essa parte jamais detenha a chave privada completa.&lt;/p>
&lt;p>&lt;strong>Shopstr&lt;/strong> abriu &lt;a href="https://github.com/shopstr-eng/shopstr/pull/492">PR #492&lt;/a> inicializando um servidor MCP (Model Context Protocol), com &lt;a href="https://github.com/shopstr-eng/shopstr/pull/494">PR #494&lt;/a> construindo a infraestrutura de suporte (fetch de relay, parsers, validação, erros, dedup, log de auditoria) e &lt;a href="https://github.com/shopstr-eng/shopstr/pull/472">PR #472&lt;/a> adicionando uma allowlist de relay para o gerenciador de relay MCP. Isso torna o Shopstr o primeiro marketplace Nostr a se expor como um servidor MCP, para que agentes de IA possam navegar e agir em listagens NIP-99 como uma ferramenta estruturada.&lt;/p>
&lt;p>&lt;strong>Keydex&lt;/strong>, o vault de compartilhamento de segredo Shamir, abriu uma migração substancial no &lt;a href="https://github.com/mplorentz/keydex/pull/226">PR #226&lt;/a> movendo kinds customizados 1337-1345 para a faixa 713-721, junto com &lt;a href="https://github.com/mplorentz/keydex/pull/239">PR #239&lt;/a> adicionando AEAD sobre shares Shamir e &lt;a href="https://github.com/mplorentz/keydex/pull/234">PR #234&lt;/a> migrando para aritmética GF256. A migração de faixa de kind alinha o Keydex com a forma como o repositório NIPs aloca kinds customizados, saindo de uma faixa auto-declarada.&lt;/p>
&lt;p>&lt;strong>Mill&lt;/strong> (&lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a>) é uma nova UI de signer Nostr drop-in do &lt;a href="https://github.com/0ceanSlim">OceanSlim&lt;/a> (mantenedor do relay Go &lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a>), lançado como um Web Component de tag de script único no &lt;a href="https://www.npmjs.com/package/nostr-mill">npm&lt;/a> e &lt;a href="https://cdn.jsdelivr.net/npm/nostr-mill/dist/mill.umd.js">jsDelivr&lt;/a>. Uma tag &lt;code>&amp;lt;script&amp;gt;&lt;/code> dá a um app web todos os seis pontos de entrada de signer comuns por trás de uma UI unificada: extensão de navegador &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>, bunker &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (colar URL ou pareamento QR com relays especificáveis pelo usuário, incomum entre integrações bunker in-page), Amber &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> via intents Android, nsec criptografada armazenada em &lt;code>sessionStorage&lt;/code> via AES-256-GCM com PBKDF2, &lt;code>npub&lt;/code> somente leitura, e geração de par de chaves no navegador. O componente é tematizável através de 29 propriedades customizadas CSS escopadas no Shadow DOM e expõe uma pequena API rastreada por SemVer (&lt;code>MILL.open&lt;/code>, eventos &lt;code>mill:connected&lt;/code> / &lt;code>mill:disconnected&lt;/code>, exports de tema nomeados). A motivação do mantenedor é que fluxos de login bunker foram reimplementados um app web por vez em todo o Nostr. Consolidar em um componente compartilhado permite que clientes convirjam em como o UX do signer deve se comportar, e transforma fluxos opcionais (como login com chave delegada através de signers de threshold, espelhando o login Google baseado em Pomegranate do Wisp coberto acima) em uma superfície reutilizável que qualquer app pode adicionar. Mill está em npm v1.5.0, mantenedor único, estágio alpha, com grain como o primeiro integrador planejado.&lt;/p>
&lt;p>&lt;strong>moStard&lt;/strong>, um fork Monero-first do &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> por &lt;a href="https://github.com/roguehashrate">roguehashrate&lt;/a>, chegou à &lt;a href="https://github.com/roguehashrate/moStard/releases">v1.0.1&lt;/a> esta semana com um conjunto de recursos reduzido e uma identidade temática Monero em camadas na mesma stack Applesauce + worker-relay. O trabalho desta semana trouxe renderização para eventos de software-application kind 32267 do Zapstore (cards embutidos na linha do tempo mostrando nome do app, ícone, screenshots, plataforma, licença e um link de launch para &lt;code>zapstore.dev/apps/&amp;lt;d-tag&amp;gt;&lt;/code>), enquetes via kind 20 e kind 21, gorjetas baseadas em Payment Targets NIP-A3 com QR codes por método, renderização de markdown em notas, suporte a picker GIF para teclados GIF externos, e correções de pareamento de signer Amber. O enquadramento Monero se estende ao fluxo de gorjeta: entradas &lt;code>payto&lt;/code> NIP-A3 para endereços &lt;code>monero&lt;/code> obtêm botões de primeira classe na mesma UI junto com &lt;code>lightning&lt;/code> e &lt;code>bitcoin&lt;/code>. O cliente é de mantenedor único e estágio alpha, mas o trabalho de 27 de maio mostra um construtor puxando NIP-A3 dos anúncios de especificação de protocolo desta semana direto para um fork em produção em dias.&lt;/p>
&lt;h2 id="atualizações-nip-e-trabalho-de-especificação-de-protocolo">Atualizações NIP e trabalho de especificação de protocolo&lt;/h2>
&lt;h3 id="stack-nip-de-calendário-quatro-propostas-da-equipe-formstr">Stack NIP de calendário: quatro propostas da equipe Formstr&lt;/h3>
&lt;p>Ix2 (&lt;a href="https://github.com/geralt-debugs">@geralt-debugs&lt;/a>) abriu quatro PRs de NIP coordenados em 17 de maio, todos referenciando a implementação &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> já lançada sob o mesmo autor. &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> propõe kind 84 como um evento generalizado de &amp;ldquo;auto-remoção de participante&amp;rdquo;: um participante taggeado em qualquer evento pode publicar um kind 84 referenciando o original via tags &lt;code>e&lt;/code>, &lt;code>a&lt;/code> e &lt;code>k&lt;/code> para sinalizar opt-out. Relays devem validar que o signer do kind 84 aparece em uma tag &lt;code>p&lt;/code> do evento referenciado antes de honrar a remoção, e uma exclusão kind 5 sempre tem precedência. O PR generaliza um padrão que anteriormente era descrito apenas dentro do contexto de calendário NIP-52, tornando o kind 84 a maneira padrão para não-autores se retirarem de qualquer evento de participante.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> é a fundação da stack de calendário: NIP-52E para eventos de calendário privados (kinds 32678 time-based, 32681 day-event, 32123 lista de calendário privado, 31926 lista de ocupado, 1052 gift wrap, 52 rumor) e NIP-52R para eventos recorrentes. No centro arquitetural está o padrão view-key: um par de chaves gerado aleatoriamente criptografa o conteúdo do evento com NIP-44, e a metade secreta (codificada em bech32 como &lt;code>nsec&lt;/code>) é gift-wrapped para cada participante. O signer detém apenas a tag &lt;code>d&lt;/code> pública; todo o resto vive em &lt;code>content&lt;/code> criptografado. Desacoplar a criptografia de conteúdo da identidade dessa forma significa que editar um evento não requer re-envio de chaves para destinatários. NIP-52R define duas tags opcionais nos kinds existentes 31923 e 31922 para declarar recorrência usando valores RRULE RFC 5545 brutos, com o índice de dia &lt;code>D&lt;/code> tornando-se opcional quando RRULE está presente. Forward secrecy está explicitamente ausente: uma view key vazada revela todas as versões passadas e futuras do evento sob a mesma 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> constrói sobre NIP-52E com uma especificação descentralizada de agendamento de compromissos que a descrição do PR chama de &amp;ldquo;uma alternativa drop-in para Calendly/Cal.com sem intermediário central.&amp;rdquo; Kind 31927 anuncia uma página de agendamento com janelas de disponibilidade criptografadas; kind 32680 é um registro de recuperação auto-criptografado do lado do host para a view key; kinds 1057 e 1058 são a solicitação e resposta de reserva gift-wrapped. O mecanismo inteligente: o reservante gera tanto a tag &lt;code>d&lt;/code> quanto a view key para o futuro evento privado antes de enviar a solicitação, para que o reservante possa adicionar o compromisso ao seu próprio calendário imediatamente com a chave correta, e o host nunca precise fazer round-trip de chave de volta. Respostas de reserva carregam uma tag &lt;code>status&lt;/code> não criptografada no wrap externo para que relays possam filtrar sem descriptografar.&lt;/p>
&lt;p>Uma implementação de referência já está no ar em &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> e como o app Calendar Android no Zapstore. &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> fecha o &lt;a href="https://github.com/nostr-protocol/nips/pull/2027">PR #2027&lt;/a> em seu favor, consolidando uma proposta anterior de calendário privado que estava aberta desde o início do ano.&lt;/p>
&lt;h3 id="payment-targets-e-silent-payments">Payment Targets e Silent Payments&lt;/h3>
&lt;p>Mais duas propostas de NIP circularam esta semana em documentos long-form &lt;code>kind:30023&lt;/code>.&lt;/p>
&lt;p>Uma proposta de &lt;strong>Payment Targets&lt;/strong> (NIP-A3 / payto) define um evento substituível kind 10133 carregando uma ou mais 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 mapeiam para URIs &lt;code>payto:&lt;/code> RFC 8905. Tipos suportados incluem bitcoin, lightning, ethereum, monero, nano, cashme, revolut e venmo. A intenção é padronizar um pote de gorjetas multi-trilho que complementa (não substitui) zaps NIP-57 baseados em lud16. Amethyst v1.11.0 é o primeiro implementador; PRs mesclados &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2953">#2953&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3009">#3009&lt;/a> trazem a superfície de assinatura e observação, e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3011">PR #3011&lt;/a> conecta a UI para &lt;code>PaymentTargetsEvent&lt;/code>.&lt;/p>
&lt;p>Duas propostas concorrentes de Silent Payments vieram de autores diferentes. A primeira variante deriva chaves de scan e spend de silent-payment BIP-352 de &lt;code>nsec&lt;/code> via tweaks aditivos públicos, para que qualquer remetente possa construir um endereço &lt;code>sp1q...&lt;/code> de uma &lt;code>npub&lt;/code> sem configuração. O aviso do autor é explícito na especificação: &amp;ldquo;bscan e bspend DEVEM ser tratados com exatamente o mesmo cuidado que nsec&amp;rdquo;, porque a chave de scan revela a nsec. Uma segunda variante toma a abordagem inversa, adicionando um campo &lt;code>sp_address&lt;/code> aos metadados de perfil kind 0 contendo um endereço padrão de silent-payment BIP-352 cujas chaves são mantidas independentes da identidade Nostr. A variante dois é estruturalmente mais segura. Ambas as propostas atraíram uma thread de revisão ponderada; erskingardner (líder do Marmot) postou um &lt;a href="https://gist.github.com/trbouma/77648ebe1005b181b67d1c4b42c7f31d?permalink_comment_id=6167489#gistcomment-6167489">comentário&lt;/a> detalhado no gist trbouma rastreando a proposta. Sua preocupação central é que a variante 1 deriva a chave privada de scan de &lt;code>nsec&lt;/code> mais um tweak publicamente computável, o que significa que qualquer um segurando a chave de scan (incluindo um serviço de scan de terceiros ao qual o usuário tem que delegar na prática) pode recuperar a &lt;code>nsec&lt;/code> completa subtraindo esse tweak. A mesma chave que permite a um serviço remoto escanear pagamentos recebidos para você também permite a esse serviço roubar sua identidade e quaisquer fundos derivados dela.&lt;/p>
&lt;p>No lado git-over-Nostr NIP-34, hzrd149 publicou 2 patches para &lt;a href="https://gitworkshop.dev/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5/relay.ngit.dev/schemata">schemata&lt;/a>. O próprio &lt;a href="https://gitworkshop.dev/">gitworkshop.dev&lt;/a> atraiu dois relatos de issues: um sinalizando que sessões de login são perdidas no refresh da página ao usar um signer remoto NIP-46, o outro pedindo por estilo distinto de link em previews de README.&lt;/p>
&lt;h2 id="seis-anos-de-maios-do-nostr">Seis anos de maios do Nostr&lt;/h2>
&lt;p>A última newsletter de maio de 2026 recua das releases da semana para percorrer o mês de maio ao longo da história do Nostr. Cada ano teve um centro de gravidade diferente: 2021 foi um único commit, 2022 foi a formação do próprio repositório NIPs, 2023 foi a explosão de especificações de protocolo, 2024 foi o ciclo de consolidação, 2025 foi quando negentropy foi mesclado e o Notedeck do Damus se graduou para Beta, e 2026 é o mês coberto neste e nos três issues anteriores.&lt;/p>
&lt;h3 id="maio-de-2021">Maio de 2021&lt;/h3>
&lt;p>O Nostr tinha seis meses. O único código Nostr vivia em &lt;a href="https://github.com/fiatjaf/nostr">fiatjaf/nostr&lt;/a> e o mês inteiro produziu exatamente um commit, mas esse commit se tornou uma das partes mais usadas do protocolo. Em 22 de maio, fiatjaf &lt;a href="https://github.com/fiatjaf/nostr/commit/9ee3a02">redirecionou o NIP-02&lt;/a> como o NIP de lista de contatos. A mensagem do commit diz: &amp;ldquo;repurpose NIP-02 and add NIP authorship&amp;rdquo;, e o crédito explícito é para &lt;a href="https://github.com/nostr-protocol/nostr/pull/16">PR #16&lt;/a> por arcbtc (Ben Arc do LNbits), aberto em 9 de fevereiro e fechado no dia anterior ao fiatjaf incorporar a ideia no NIP-02. A proposta do arcbtc era pequena: um kind para &amp;ldquo;enviar lista de seguidores para relays&amp;rdquo; que seria &amp;ldquo;útil para restaurar contas e recomendar chaves públicas para seguir.&amp;rdquo; fiatjaf generalizou isso em um único evento &lt;code>kind:3&lt;/code> cujas tags servem três propósitos ao mesmo tempo. Elas são uma lista de follows (o grafo social), um store de petname (apelidos locais para amigos) e uma fonte de recomendação de relay (quais relays um follow usa). O mesmo evento, substituível por autor, tornou-se a resposta canônica para &amp;ldquo;quem essa pessoa segue&amp;rdquo;, &amp;ldquo;como ela os chama&amp;rdquo; e &amp;ldquo;onde ela lê.&amp;rdquo; Cada cliente construído nos próximos cinco anos lê &lt;code>kind:3&lt;/code>. A convenção adicionada no mesmo commit, de que cada NIP nomeia seu autor, é a razão pela qual cada especificação agora tem assinatura.&lt;/p>
&lt;h3 id="maio-de-2022">Maio de 2022&lt;/h3>
&lt;p>O mês em que o repositório NIPs se tornou um projeto comunitário. Em 1º de maio, fiatjaf &lt;a href="https://github.com/nostr-protocol/nips/commit/f25c7e6">migrou as especificações&lt;/a> de &lt;code>fiatjaf/nostr&lt;/code> para um repositório dedicado &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> e em 2 de maio adicionou &lt;a href="https://github.com/nostr-protocol/nips/commit/c053670">critérios formais de aceitação&lt;/a>. Dois dias depois, Robert C. Martin (Uncle Bob) abriu &lt;a href="https://github.com/nostr-protocol/nips/pull/1">PR #1&lt;/a>, o primeiro pull request externo, propondo convenções de threading para tags &lt;code>e&lt;/code> e &lt;code>p&lt;/code>. O PR foi originalmente numerado NIP-13, então &lt;a href="https://github.com/nostr-protocol/nips/commit/bd4a81a">renumerado para NIP-10&lt;/a> para abrir espaço para proof-of-work. Três dos primeiros seis NIPs são do Uncle Bob: NIP-10 (marcadores de threading), NIP-14 (&lt;a href="https://github.com/nostr-protocol/nips/commit/ebacbcc">a tag Subject&lt;/a>), e o commit de 21 de maio que fixou &lt;a href="https://github.com/nostr-protocol/nips/commit/e22ea1a">&lt;code>kind:1&lt;/code> como o kind canônico de nota de texto curta&lt;/a>. Em 5 de maio, William Casarin fez seus primeiros commits de NIP: &lt;a href="https://github.com/nostr-protocol/nips/commit/d7a4aad">NIP-13 Proof of Work&lt;/a> e o &lt;a href="https://github.com/nostr-protocol/nips/commit/ad1eb96">evento kind:2 recommend-relay&lt;/a>. No dia seguinte, fiatjaf publicou &lt;a href="https://github.com/nostr-protocol/nips/commit/37eb53e">NIP-07 &lt;code>window.nostr&lt;/code>&lt;/a>, vinte linhas de markdown que definiram a interface de signer de extensão de navegador ainda usada hoje. O &lt;a href="https://github.com/nostr-protocol/nips/commit/57b86d2">aviso CORS&lt;/a> do NIP-05 por David A. Harding e o &lt;a href="https://github.com/nostr-protocol/nips/commit/a4aea53">&lt;code>filter.limit&lt;/code>&lt;/a> do NIP-01 chegaram na mesma semana. nostr-tools lançou sua &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/dc489bf">primeira build ESM importável no navegador&lt;/a> em 8 de maio. Semisol rascunhou &lt;a href="https://github.com/nostr-protocol/nips/commit/a787093">NIP-15 (End Of Stored Events)&lt;/a> e &lt;a href="https://github.com/nostr-protocol/nips/commit/62fde6c">NIP-16 (faixas de kind de evento)&lt;/a> no final do mês, os documentos que ainda governam a semântica de sync de relay e a classificação regular-vs-substituível-vs-efêmero.&lt;/p>
&lt;h3 id="maio-de-2023">Maio de 2023&lt;/h3>
&lt;p>A explosão de especificação de protocolo. Sessenta e quatro PRs de NIP foram abertos naquele mês, com várias das propostas que definiram a superfície do Nostr para os próximos dois anos todas chegando em 31 dias, e o maior anúncio de financiamento que o Nostr já havia recebido chegou em 4 de maio com o &lt;a href="https://opensats.org/blog/opensats-receives-additional-funding-of-dollar10m-from-startsmall">grant OpenSats de $10 milhões do #startsmall de Jack Dorsey&lt;/a>, o dinheiro que sustentou cada onda de grants Nostr desde então. NIP-47 (Nostr Wallet Connect) foi &lt;a href="https://github.com/nostr-protocol/nips/pull/406">mesclado em 2 de maio&lt;/a>, trazendo a especificação wallet-connect do Alby para o protocolo principal. Dois dias depois, Vitor Pamplona &lt;a href="https://github.com/nostr-protocol/nips/pull/498">propôs NIP-53 Live Activities&lt;/a> com salas &lt;code>kind:30311&lt;/code> e mensagens de chat &lt;code>kind:1311&lt;/code>, a fundação para cada superfície de livestreaming Nostr que seguiu. Pablo Fernandez abriu &lt;a href="https://github.com/nostr-protocol/nips/pull/501">NIP-84 Highlights&lt;/a> em 5 de maio e &lt;a href="https://github.com/nostr-protocol/nips/pull/530">NIP-89 Recommended Application Handlers&lt;/a> em 14 de maio. v0l (Kieran Babich, autor do Snort) propôs &lt;a href="https://github.com/nostr-protocol/nips/commit/29f26e7">NIP-98 HTTP Auth&lt;/a> em 8 de maio, a primitiva de autenticação da qual NIP-96 e Blossom ambos depois dependeram. Jonathan Staab propôs &lt;a href="https://github.com/nostr-protocol/nips/pull/532">NIP-32 Labels&lt;/a> em 15 de maio, e &lt;a href="https://github.com/nostr-protocol/nips/pull/484">NIP-30 Custom Emoji&lt;/a> foi mesclado no mesmo dia. Arthur Franca propôs &lt;a href="https://github.com/nostr-protocol/nips/pull/547">NIP-96 HTTP File Storage Integration&lt;/a> em 21 de maio. Dois dias depois, Vitor adicionou &lt;a href="https://github.com/nostr-protocol/nips/commit/e4937be">zap splits ao NIP-57&lt;/a> e verbiricha adicionou &lt;a href="https://github.com/nostr-protocol/nips/commit/0495931">rascunhos long-form &lt;code>kind:30024&lt;/code> ao NIP-23&lt;/a>, a especificação que se tornou a fundação para fluxos de trabalho modernos de autoria long-form Nostr em Habla, YakiHonne e Highlighter. fiatjaf propôs &lt;a href="https://github.com/nostr-protocol/nips/pull/556">NIP-29 Simple Groups&lt;/a> no final do mês, o mesmo NIP-29 que Wisp, Flotilla, Chachi e 0xChat implementam em produção hoje.&lt;/p>
&lt;h3 id="maio-de-2024">Maio de 2024&lt;/h3>
&lt;p>O ciclo de consolidação. Menos propostas chamativas, mais entregas. &lt;a href="https://github.com/nostr-protocol/nips/pull/787">NIP-54 Decentralized Wikis&lt;/a> foi mesclado em 2 de maio com artigos &lt;code>kind:30818&lt;/code> e tags &lt;code>d&lt;/code> normalizadas por caso. Três dias depois, &lt;a href="https://github.com/nostr-protocol/nips/pull/1213">NIP-56&lt;/a> foi estendido para que relatos de abuso pudessem sinalizar ameaças digitais (malware, phishing) junto com categorias apenas de conteúdo. Em 6 de maio, &lt;a href="https://github.com/nostr-protocol/nips/pull/1221">reações NIP-25 foram simplificadas&lt;/a> para parar de incluir a thread de resposta inteira como tags &lt;code>e&lt;/code>. Arthur Franca &lt;a href="https://github.com/nostr-protocol/nips/pull/1233">propôs NIP-22 Comment&lt;/a> em 12 de maio, introduzindo &lt;code>kind:1111&lt;/code> para que respostas a eventos não-&lt;code>kind:1&lt;/code> (artigos, arquivos, produtos) obtenham uma forma estruturada de threading. Em 19 de maio, fiatjaf &lt;a href="https://github.com/nostr-protocol/nips/pull/1248">reformulou o NIP-46&lt;/a> para abandonar o NIP-04 inteiramente e mudar todo o tráfego bunker para criptografia NIP-44, o movimento de descontinuação que moldou cada implementação bunker desde. Em 20 de maio, &lt;a href="https://github.com/nostr-protocol/nips/pull/923">NIP-71 Video Events&lt;/a> foi mesclado com &lt;code>kind:21&lt;/code> e &lt;code>kind:22&lt;/code>, e &lt;a href="https://github.com/nostr-protocol/nips/pull/1171">NIP-10&lt;/a> adicionou o argumento opcional de pubkey em tags &lt;code>e&lt;/code> para que clientes possam resolver autores de thread sem primeiro buscar o evento referenciado. &lt;a href="https://github.com/nostr-protocol/nips/pull/1175">NIP-35 Torrents&lt;/a> de Kieran Walsh foi mesclado em 22 de maio, e em 24 de maio o README dos NIPs referenciou pela primeira vez &lt;a href="https://github.com/nostr-protocol/nips/pull/1251">CIP-01&lt;/a> como uma proposta off-repo, sinalizando o início do padrão &amp;ldquo;NIPs como um de vários locais de proposta&amp;rdquo;. Em 25 de maio, um &lt;a href="https://github.com/nostr-protocol/nips/pull/1254">PR de limpeza&lt;/a> removeu a tag &lt;code>aes-256-gcm&lt;/code> do NIP-71 antes que implementações downstream a congelassem. NIP-96 adicionou &lt;a href="https://github.com/nostr-protocol/nips/pull/1262">&lt;code>list files&lt;/code> e removeu o requisito de transformação&lt;/a> em 27 de maio. Em 28 de maio, Jonathan Staab propôs &lt;a href="https://github.com/nostr-protocol/nips/pull/1264">elevar a barra de aceitação de NIP&lt;/a> para exigir pelo menos duas implementações interoperáveis antes que um rascunho possa se graduar. Lado do cliente: Damus taggeou &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.7.2">v1.7.2&lt;/a> e &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.8">v1.8&lt;/a> mais uma &lt;a href="https://github.com/damus-io/damus/commits/v1.9">v1.9 com tratamento completo de marcador NIP-10&lt;/a> em 9-10 de maio, trouxe &lt;a href="https://github.com/damus-io/damus/commit/8feb228">autenticação NIP-98 em notificações push&lt;/a>, e lançou suporte completo a &lt;a href="https://github.com/damus-io/damus/commit/52aefc8">marcador NIP-10&lt;/a>. Amethyst tornou &lt;a href="https://github.com/vitorpamplona/amethyst/commit/1f45a63">NIP-17 o modo padrão de DM&lt;/a> em 14 de maio, construiu &lt;a href="https://github.com/vitorpamplona/amethyst/commit/aa97c7e">gerenciamento de relay outbox-model NIP-65&lt;/a>, adicionou &lt;a href="https://github.com/vitorpamplona/amethyst/commit/ff94f45">seleção de servidor NIP-96&lt;/a>, e lançou &lt;a href="https://github.com/vitorpamplona/amethyst/commit/04c4490">derivação de chave NIP-06 BIP-32/BIP-39&lt;/a>. Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.2">0.99.2&lt;/a> em 10 de maio adicionou tagging de usuário e NWC de carteira 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 trouxe um &lt;a href="https://github.com/nostr-dev-kit/ndk/commits/master/?since=2024-05-01&amp;amp;until=2024-06-01">cluster de optimistic-update NDK&lt;/a> entre 24-31 de maio. Snort adicionou &lt;a href="https://github.com/v0l/snort/commit/5763d91">seleção de servidor NIP-96&lt;/a>, e cashu-ts &lt;a href="https://github.com/cashubtc/cashu-ts/commit/3e20f45">separou suas primitivas de criptografia&lt;/a> em &lt;code>@cashu/crypto&lt;/code>.&lt;/p>
&lt;h3 id="maio-de-2025">Maio de 2025&lt;/h3>
&lt;p>O mês em que &lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77 (Negentropy Syncing)&lt;/a> foi mesclado em 27 de maio, a especificação do fiatjaf e Doug Hoyte para o protocolo de fio que substitui filtros REQ de força bruta por computação de diferença de custo logarítmico. Este era o mesmo negentropy que strfry havia lançado dois anos antes como recurso do lado do relay, agora formalizado como um protocolo cliente-relay, e &lt;a href="https://github.com/nostr-protocol/nips/pull/1939">a entrada no README&lt;/a> chegou no mesmo dia. Na semana anterior, &lt;a href="https://github.com/nostr-protocol/nips/pull/1897">NIP-23 long-form&lt;/a> definiu como documentos HTML se associam a entidades Nostr através de uma tag &lt;code>&amp;lt;link&amp;gt;&lt;/code> em 24 de maio, a primitiva de cópia web canônica. NIP-25 adicionou &lt;a href="https://github.com/nostr-protocol/nips/pull/1702">dicas de relay de alvo de reação&lt;/a> em 22 de maio e &lt;a href="https://github.com/nostr-protocol/nips/pull/1486">removeu a recomendação emoji-para-like/dislike&lt;/a>, tratando emojis como unidades semânticas distintas. NIP-52 foi &lt;a href="https://github.com/nostr-protocol/nips/pull/1922">simplificado&lt;/a> em 14 de maio para focar nos kinds que os clientes estavam lançando em produção, o corte que tornou as extensões de calendário Formstr de um ano depois mais limpas de enxertar. Em 9 de maio, &lt;a href="https://github.com/nostr-protocol/nips/commit/873afc5fb823f58c3b7f29c5090f9c56172623f2">Follow Packs&lt;/a> (kind 39089 listas de follow curadas) e &lt;a href="https://github.com/nostr-protocol/nips/pull/1848">Favorite Relays&lt;/a> (uma nova lista substituível sob o NIP-51) entraram no README no mesmo dia. O arco do Protocolo Marmot ainda não havia começado: apenas o repositório &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> existia (primeiro commit 9 de setembro de 2024), e maio de 2025 era sua fase de protótipo Svelte+Tauri, com o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/commit/b8e6754">commit de 14 de maio&lt;/a> removendo código específico do Tauri conforme o projeto pivotava para sua arquitetura atual. O core Rust dedicado MDK (12 de setembro de 2025), o repositório de especificação Marmot (19 de setembro de 2025), e a UI Flutter (2 de dezembro de 2025) todos vieram depois.&lt;/p>
&lt;h3 id="maio-de-2026">Maio de 2026&lt;/h3>
&lt;p>O mês coberto na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-06-newsletter/">Newsletter #21&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/">#22&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-21-newsletter/">#23&lt;/a> e neste issue. A linha definidora é MLS-no-Nostr chegando a produção multi-cliente: &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">MDK 0.8.0&lt;/a> lançou primitivas de leaf-index MIP-05 e key packages endereçáveis, seguido por &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> adicionando validação de mensagem efêmera NIP-40 entre iOS e Android através de uma superfície UniFFI compartilhada. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">White Noise v2026.5.22+25&lt;/a> lançou push no iOS através de uma Notification Service Extension que descriptografa ciphertext MLS dentro do processo de extensão para que o broker nunca veja plaintext, e dois novos clientes Marmot apareceram: &lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a> (um cliente .NET/Avalonia para desktop e Android com slots KeyPackage multi-dispositivo) e &lt;a href="https://cordn.net">Cordn&lt;/a> (uma arquitetura MLS alternativa usando um coordenador por grupo sobre ContextVM). Angor migrou sua mensageria criptografada de NIP-04 para NIP-44 no &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a>, fechando o arco de descontinuação que abriu com &lt;a href="https://github.com/nostr-protocol/nips/pull/574">a proposta NIP-44 de Paul Miller em maio de 2023&lt;/a>. A equipe Formstr abriu a maior submissão coordenada de NIP na memória recente em 17 de maio, com &lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> para auto-remoção de participante, &lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> para eventos de calendário privados e recorrência (NIP-52E e NIP-52R), e &lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a> para agendamento descentralizado de compromissos, todos com &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> já lançando a implementação de referência. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">Amethyst v1.11.0&lt;/a> renderizou eventos de calendário NIP-52 em sua própria categoria de linha do tempo, e o padrão de clientes controlados por agente que começou com AgentNoise na semana passada continuou com Vector v0.4.0 lançando um servidor MCP de 21 ferramentas e Shopstr abrindo sua superfície MCP como o primeiro marketplace-como-ferramenta-de-agente do Nostr.&lt;/p>
&lt;hr>
&lt;p>Se você quiser discutir, mande uma DM para nós no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #23</title><link>https://nostrcompass.org/pt/newsletters/2026-05-21-newsletter/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-05-21-newsletter/</guid><description>&lt;p>Primal 3.5 lança uma shell Android reconstruída, Amethyst adiciona zaps Bitcoin onchain, White Noise ganha renderização de markdown e deep links, Keycast passa por uma auditoria de segurança, e AgentNoise permite controlar agentes de código IA locais através de chat criptografado pelo Marmot. Hostr lança uma plataforma de acomodações para aluguel P2P no Nostr com quatro NIPs em rascunho cobrindo listagens, reservas e escrow baseado em EVM. Angor migra mensageria criptografada de NIP-04 para NIP-44, Dart NDK adiciona NIP-77 e um signer web, Alby js-sdk v8 lança reconexão multi-relay NWC nativa, e KeyChat corrige uma lacuna de forward secrecy na exclusão de prekey único do Signal. No lado do protocolo, o bond anti-abuso do Mostro chega à Fase 2, Wisp lança respostas privadas e reações gift-wrapped, e uma onda de implementação NIP-05 do Namecoin toca meia dúzia de clientes em uma única semana.&lt;/p></description><content:encoded>&lt;p>Primal 3.5 lança uma shell Android reconstruída, Amethyst adiciona zaps Bitcoin onchain, White Noise ganha renderização de markdown e deep links, Keycast passa por uma auditoria de segurança, e AgentNoise permite controlar agentes de código IA locais através de chat criptografado pelo Marmot. Hostr lança uma plataforma de acomodações para aluguel P2P no Nostr com quatro NIPs em rascunho cobrindo listagens, reservas e escrow baseado em EVM. Angor migra mensageria criptografada de NIP-04 para NIP-44, Dart NDK adiciona NIP-77 e um signer web, Alby js-sdk v8 lança reconexão multi-relay NWC nativa, e KeyChat corrige uma lacuna de forward secrecy na exclusão de prekey único do Signal. No lado do protocolo, o bond anti-abuso do Mostro chega à Fase 2, Wisp lança respostas privadas e reações gift-wrapped, e uma onda de implementação NIP-05 do Namecoin toca meia dúzia de clientes em uma única semana.&lt;/p>
&lt;h2 id="matérias-principais">Matérias principais&lt;/h2>
&lt;h3 id="primal-35-para-android">Primal 3.5 para Android&lt;/h3>
&lt;p>Primal, o cliente social apoiado por sua própria infraestrutura de relay de cache, lançou &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9">3.5.9&lt;/a> esta semana com uma shell de aplicação reconstruída. O redesign substitui a estrutura de navegação anterior por um layout atualizado e uma nova tela Explore, dando à principal superfície de descoberta seu próprio home dedicado. A release adiciona reprodução de áudio para link previews, para que arquivos de áudio embutidos em notas sejam reproduzidos inline sem sair do feed. Badges de verificação NIP-05 agora aparecem inline nos perfis, apresentando confirmação de identidade em um relance. A filtragem de notificações recebeu uma reformulação, permitindo aos usuários restringir quais tipos de eventos chegam à sua lista de notificações. O editor ganhou melhor tratamento de event-links, e a camada de banco de dados subjacente recebeu correções de estabilidade.&lt;/p>
&lt;h3 id="white-noise-markdown-deep-links-e-metadados-de-áudio">White Noise: markdown, deep links e metadados de áudio&lt;/h3>
&lt;p>White Noise, o app de mensageria de grupo criptografado pelo Marmot construído sobre Nostr e MLS (&lt;a href="https://www.rfc-editor.org/rfc/rfc9420">RFC 9420&lt;/a>), teve uma de suas semanas mais movimentadas nos repositórios de frontend e backend.&lt;/p>
&lt;p>No frontend, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/665">PR #665&lt;/a> adiciona renderização completa de markdown para mensagens de chat, para que negrito, itálico, blocos de código e links agora sejam renderizados nativamente na visão de mensagem. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/675">PR #675&lt;/a> ativa o fluxo de sair de grupo que anteriormente era bloqueado para admins não-últimos, e &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/661">PR #661&lt;/a> adiciona suporte nativo a deep link para URIs &lt;code>whitenoise://&lt;/code> e &lt;code>whitenoise-staging://&lt;/code> cobrindo usuários, chats e configurações, sem exigir nenhuma infraestrutura de redirecionamento HTTP.&lt;/p>
&lt;p>No backend em whitenoise-rs, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/835">PR #835&lt;/a> faz a rotação de key package funcionar corretamente reutilizando o slot &lt;code>d_tag&lt;/code> para publicações kind:30443, ativando a semântica de eventos substituíveis NIP-33 para que rotações sucessivas de key package substituam o evento anterior nos relays, mantendo apenas o key package atual. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/833">PR #833&lt;/a> estende &lt;code>FileMetadata&lt;/code> com campos opcionais &lt;code>duration_ms&lt;/code> e &lt;code>waveform&lt;/code> para anexos de áudio, coordenado com o &lt;a href="https://github.com/marmot-protocol/mdk/pull/300">PR #300&lt;/a> do MDK que adiciona os mesmos campos às tags de mídia MIP-04. Uma nova crate &lt;code>whitenoise-markdown&lt;/code> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/836">PR #836&lt;/a>) substitui o parser de tokens nostr-sdk anterior por uma biblioteca dedicada de renderização de markdown.&lt;/p>
&lt;p>A própria especificação do protocolo Marmot recebeu uma correção de segurança no &lt;a href="https://github.com/marmot-protocol/marmot/pull/68">PR #68&lt;/a>, que fecha um problema de segurança especificando explicitamente HKDF-SHA256 para derivações de chave de imagem no MIP-01, removendo ambiguidade que poderia levar à divergência de implementação. No MDK, &lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> sanitiza motivos de falha em welcome e limita o comprimento armazenado, fechando uma constatação de segurança separada.&lt;/p>
&lt;h3 id="amethyst-v1100-zaps-bitcoin-onchain">Amethyst v1.10.0: Zaps Bitcoin Onchain&lt;/h3>
&lt;p>Amethyst lançou quatro releases esta semana, com &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.10.0">v1.10.0&lt;/a> como o destaque. A release adiciona suporte para zaps Bitcoin onchain NIP-BC, permitindo aos usuários enviar, receber e exibir zaps liquidados diretamente onchain via transações Bitcoin. Releases anteriores na sequência corrigiram a detecção de blob Blossom para rejeitar nomes de arquivo não conformes (&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.09.2">v1.09.2&lt;/a>), aplicaram patches nas regras do ProGuard para builds desktop, e mesclaram o pull request &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2977">#2977&lt;/a> para mostrar zappers de Bitcoin onchain como uma linha ₿ dedicada na galeria expandida de reações. Uma tela de histórico de transações on-chain em progresso com paginação chegou no &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a>.&lt;/p>
&lt;h3 id="agentnoise-controle-agentes-de-código-sobre-white-noise">AgentNoise: controle agentes de código sobre White Noise&lt;/h3>
&lt;p>&lt;a href="https://github.com/nvk/agentnoise">AgentNoise&lt;/a> por nvk é um helper de desktop nativo em Rust que permite usar um telefone rodando White Noise como superfície de controle para sessões locais de agentes de código Codex e Claude. A ferramenta escuta um ou mais chats White Noise, autentica remetentes através de um fluxo de PIN de primeiro pareamento, e lança agentes de código locais através do launcher configurado. Enviar &lt;code>/claude &amp;lt;prompt&amp;gt;&lt;/code> do seu telefone abre uma nova sessão de trabalho White Noise nomeada segundo o hostname da máquina e um curto resumo do prompt, então transmite atualizações de progresso e saída final de volta para esse chat. É intencionalmente Rust-first e mantém Node fora do caminho da ponte confiável. O projeto chegou à &lt;a href="https://github.com/nvk/agentnoise/releases/tag/v0.1.24">v0.1.24&lt;/a> esta semana, adicionando respostas mais curtas legíveis para o telefone, referências de job por prefixo curto único, e um watcher de sessão local opcional. AgentNoise dirige os CLIs &lt;code>wn&lt;/code> e &lt;code>wnd&lt;/code> de &lt;code>marmot-protocol/whitenoise-rs&lt;/code> como subprocessos, então compartilha seu transporte Nostr com o próprio cliente White Noise.&lt;/p>
&lt;h3 id="auditoria-de-segurança-do-keycast-concluída">Auditoria de segurança do Keycast concluída&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/keycast">Keycast&lt;/a>, o servidor de assinatura remota NIP-46 orientado a equipes que armazena chaves privadas Nostr criptografadas em repouso no SQLite, completou uma auditoria de segurança em maio de 2026. A passagem de hardening abordou questões de autenticação, permissão, integridade de dados e dependências, e os resultados estão documentados em &lt;a href="https://github.com/marmot-protocol/keycast/blob/master/AUDIT.md">AUDIT.md&lt;/a>. As mudanças incluem: HTTP auth NIP-98 agora requer exatamente uma tag &lt;code>u&lt;/code> e uma tag &lt;code>method&lt;/code>, rejeita timestamps obsoletos e valida hashes &lt;code>payload&lt;/code>; a allowlist &lt;code>ALLOWED_PUBKEYS&lt;/code> é parseada exatamente e aplicada no servidor; políticas vazias agora fazem default-deny em requisições de sign/encrypt/decrypt; a aplicação de foreign-key é ativada em conexões SQLite; e rotas de app aninhadas como &lt;code>/teams/:id&lt;/code> são protegidas no servidor. Uma migração SQL normaliza o JSON antigo de permissão allowed-kinds no startup. O projeto ainda está em estágio inicial e a auditoria observa itens residuais antes de confiá-lo com chaves reais de equipe.&lt;/p>
&lt;h3 id="scramble-cliente-marmot-para-desktop-e-android">Scramble: cliente Marmot para desktop e Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a> (anteriormente OpenChat) é um cliente .NET/Avalonia para desktop e Android para o &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Protocolo Marmot&lt;/a>, implementando MIPs 00-04: publicação de KeyPackage (kind:30443), metadados de grupo com a extensão MLS NostrGroupData, eventos welcome gift-wrapped NIP-59 (kind:444), mensagens criptografadas ChaCha20-Poly1305 (kind:445) e anexos de mídia criptografados Blossom. É totalmente interoperável com White Noise e qualquer outro cliente compatível com Marmot.&lt;/p>
&lt;p>O projeto lançou 13 releases esta semana, com suporte multi-dispositivo como recurso principal. Cada dispositivo gera um slot único de KeyPackage (uma tag &lt;code>d&lt;/code> no kind:30443). No startup, Scramble busca os próprios KeyPackages do usuário nos relays, detecta IDs de slot de dispositivos pares, e os adiciona automaticamente a grupos MLS existentes usando o fluxo de commit em stage. O auto-add é restrito a grupos onde o usuário atual é admin; grupos não-admin são pulados com orientação para pedir ao admin do grupo. Um banner de divulgação de forward-secrecy informa a dispositivos recém-vinculados que mensagens antigas não estão disponíveis. Uma passagem de reconciliação de ID de slot (&lt;code>TryReconcileSlotId&lt;/code>) lida com dispositivos migrados de versões pré-multi-dispositivo comparando bytes de KeyPackage do relay com material de chave local para adotar a tag &lt;code>d&lt;/code> correta. A reconexão de signer externo para usuários Amber e NIP-46 também foi corrigida: o guard &lt;code>IsConnected&lt;/code> que bloqueava a auto-reconexão embutida do &lt;code>ExternalSignerService&lt;/code> foi removido em todos os nove pontos de chamada em &lt;code>NostrService&lt;/code>.&lt;/p>
&lt;h3 id="hostr-acomodação-para-aluguel-p2p-no-nostr">Hostr: acomodação para aluguel P2P no Nostr&lt;/h3>
&lt;p>&lt;a href="https://hostr.network">Hostr&lt;/a> (&lt;a href="https://github.com/sudonym-btc/hostr">fonte&lt;/a>) é uma plataforma peer-to-peer de acomodações para aluguel construída inteiramente no Nostr. Cobre todo o fluxo estilo Airbnb (buscar e listar propriedades, negociar reservas e liquidar pagamentos) usando quatro NIPs em rascunho que o projeto está desenvolvendo em paralelo com a aplicação.&lt;/p>
&lt;p>O NIP de acomodação estende classificados &lt;a href="https://github.com/nostr-protocol/nips/blob/master/99.md">NIP-99&lt;/a> (kind:30402 ativo, kind:30403 rascunho) com tags específicas de acomodação 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>), horários de check-in/check-out, estadia mínima, e índices de células geoespaciais H3 para busca baseada em localização em precisão configurável. O NIP de reserva define um protocolo completo de negociação e ciclo de vida: eventos de reserva substituíveis kind:32122 carregam um trade ID &lt;code>d&lt;/code>, uma tag âncora &lt;code>a&lt;/code> de listagem, e tags &lt;code>p&lt;/code> de participantes com papéis (&lt;code>buyer&lt;/code>, &lt;code>seller&lt;/code>, &lt;code>escrow&lt;/code>); rumors de mensagem estruturada kind:1327 entregam contraofertas privadas de estágio de negociação via gift wraps NIP-59 para que a negociação fique fora de relays públicos; eventos de transição append-only kind:1326 criam uma trilha de auditoria pública uma vez que uma reserva é confirmada. A privacidade do comprador é preservada através de chaves Nostr temporárias por trade vinculadas à identidade real do comprador via tags &lt;code>participant_proof&lt;/code> criptografadas. O NIP de escrow define anúncios de serviço de escrow kind:30303 e declarações de confiança de usuário kind:17388; a implementação de referência usa contratos inteligentes EVM em Rootstock, com &lt;code>contractBytecodeHash&lt;/code> permitindo aos clientes verificar se o contrato implantado corresponde a uma implementação auditada conhecida. O NIP de listagem de marketplace define tags genéricas compartilhadas entre todos os perfis de marketplace NIP-99, incluindo &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> e &lt;code>maxDisputePeriod&lt;/code>. Esta semana o projeto preparou sua submissão à app store e mesclou suporte a identidade de cliente MCP para automação voltada a agentes.&lt;/p>
&lt;p>Duas novas entradas apareceram na plataforma Shakespeare MiniApps esta semana: &lt;a href="https://inkpress.shakespeare.wtf">InkPress&lt;/a>, um gerador de revista por IA que publica conteúdo estruturado no estilo revista como eventos Nostr, e &lt;a href="https://pressstr.shakespeare.wtf">PressStr&lt;/a>, uma plataforma de escrita e publicação para a stack Soapbox.&lt;/p>
&lt;h2 id="lançando-esta-semana">Lançando esta semana&lt;/h2>
&lt;h3 id="ngit-v244">ngit v2.4.4&lt;/h3>
&lt;p>&lt;strong>ngit&lt;/strong> lançou &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.4">v2.4.4&lt;/a>, adicionando &lt;code>ngit sync --trust-server&lt;/code> (&lt;code>-t&lt;/code>) para casos em que um servidor git está fast-forward à frente do estado Nostr. Quando essa situação é detectada, o sync reporta as refs afetadas e requer a flag para assinar e publicar um evento de estado atualizado; uma configuração git &lt;code>nostr.trust-server-domains&lt;/code> fornece uma allowlist separada por ponto e vírgula para servidores que devem ser confiados automaticamente sem a flag.&lt;/p>
&lt;h3 id="amber-v610-pre3-adiciona-assinatura-psbt">Amber v6.1.0-pre3 adiciona assinatura PSBT&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> lançou &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre3">v6.1.0-pre3&lt;/a> com layout melhorado para novas conexões de app, correções de crash, e uma opção select/deselect all na tela de permissões. &lt;a href="https://github.com/greenart7c3/Amber/pull/438">PR #438&lt;/a> adiciona suporte a assinatura PSBT através dos caminhos baseados em Intent e em relay NIP-46, permitindo ao Amber assinar Partially Signed Bitcoin Transactions sem expor a nsec ao app requisitante.&lt;/p>
&lt;h3 id="wisp-v110-lança-respostas-privadas-e-remove-suporte-a-amber">Wisp v1.1.0 lança respostas privadas e remove suporte a Amber&lt;/h3>
&lt;p>&lt;strong>Wisp&lt;/strong> lançou &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.0">v1.1.0&lt;/a> com respostas privadas via gift wrap NIP-17 (&lt;a href="https://github.com/barrydeen/wisp/pull/540">PR #540&lt;/a>), reações gift-wrapped e zaps DIP-03 em respostas privadas (&lt;a href="https://github.com/barrydeen/wisp/pull/543">PR #543&lt;/a>), auto-tradução para notas (&lt;a href="https://github.com/barrydeen/wisp/pull/523">PR #523&lt;/a>), e uma entrada em fiat estilo register no diálogo de zap. &lt;a href="https://github.com/barrydeen/wisp/pull/541">PR #541&lt;/a> migra zaps privados de um esquema plaintext de DM-relay caseiro para DIP-03 com roteamento adequado de DM-relay. O mesmo ciclo de release removeu o suporte a signer remoto NIP-55 (&lt;a href="https://github.com/barrydeen/wisp/pull/531">PR #531&lt;/a>), abandonando Amber e outras integrações de signer externo, e removeu o relay local empacotado (&lt;a href="https://github.com/barrydeen/wisp/pull/533">PR #533&lt;/a>). Wisp é um cliente social Nostr para Android.&lt;/p>
&lt;h3 id="calendar-by-formstr-v154-corrige-gift-wrap-para-novos-participantes">Calendar by Formstr v1.5.4 corrige gift wrap para novos participantes&lt;/h3>
&lt;p>&lt;strong>Calendar by Formstr&lt;/strong> lançou &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.4">v1.5.4&lt;/a> (a mais recente em uma sequência v1.5.2 → v1.5.4). &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/160">PR #160&lt;/a> corrige um bug onde editar um evento de calendário privado com novos participantes publicava o evento atualizado com as novas pubkeys em tags &lt;code>p&lt;/code> mas nunca criava ou entregava convites gift wrap a esses participantes, quebrando o fluxo de convite para adições de última hora. &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/156">PR #156&lt;/a> adiciona tratamento de erro em torno da descriptografia de eventos privados para que clientes não lancem mais em eventos indecodificáveis, e &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/138">PR #138&lt;/a> corrige horários de eventos recorrentes que estavam desviando através de fusos horários.&lt;/p>
&lt;h3 id="applesauce-v610-adiciona-git-casts-nip-34-e-relays-de-lookup-nip-51">Applesauce v6.1.0 adiciona git casts NIP-34 e relays de lookup NIP-51&lt;/h3>
&lt;p>&lt;strong>Applesauce&lt;/strong> lançou &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.1.0">v6.1.0&lt;/a> em seus pacotes com suporte significativo a NIP-34 (git-over-Nostr): applesauce-common adiciona novos casts &lt;code>GitRepository&lt;/code>, &lt;code>GitGraspList&lt;/code> e &lt;code>FavoriteGitRepos&lt;/code> além de factories correspondentes, e expõe propriedades reativas &lt;code>User.favoriteGitRepos$&lt;/code>, &lt;code>User.gitAuthors$&lt;/code> e &lt;code>User.graspServers$&lt;/code> para que aplicações possam listar repos git seguidos por um usuário, mantenedores de repo, e servidores GRASP configurados diretamente do mesmo objeto User. A mesma release adiciona suporte a listas de relay de lookup NIP-51 kind 10086, uma adição recente à família relay-list usada para descobrir onde encontrar dados específicos. applesauce-core ganha &lt;code>replaceableAddress&lt;/code> em &lt;code>EventCast&lt;/code> para lookup de endereço substituível NIP-01, além de &lt;code>pointer&lt;/code>, &lt;code>kind&lt;/code> e um helper &lt;code>getReplaceableAddressForEvent&lt;/code>, e adiciona um método &lt;code>timeline$()&lt;/code> no cast base &lt;code>User&lt;/code>. &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a> corrige métodos manuais de pool que descartavam silenciosamente relays offline.&lt;/p>
&lt;h3 id="sprout-v0016-lança-binário-sprig-e-protocolo-huddle-v2">Sprout v0.0.16 lança binário Sprig e protocolo huddle v2&lt;/h3>
&lt;p>&lt;strong>Sprout&lt;/strong> pelo Block, um workspace de equipe auto-hospedado baseado em relay Nostr onde humanos e agentes IA compartilham as mesmas salas e log de eventos, lançou &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.16">v0.0.16&lt;/a> do app desktop junto com builds contínuos do novo binário all-in-one Sprig (&lt;a href="https://github.com/block/sprout/pull/605">PR #605&lt;/a>), que empacota o harness ACP, agente e MCP de desenvolvedor em um único binário estilo busybox para implantação fácil. A flag &lt;code>--no-memory&lt;/code> adicionada no &lt;a href="https://github.com/block/sprout/pull/611">PR #611&lt;/a> permite a operadores desativar a injeção de memória central NIP-AE para o harness ACP. No lado de tempo real, &lt;a href="https://github.com/block/sprout/pull/609">PR #609&lt;/a> estende o protocolo de voz huddle a um header de frame v2 suportando até 10 pares simultâneos.&lt;/p>
&lt;h3 id="nostrord-v103-adiciona-keychain-do-os-e-multi-conta">Nostrord v1.0.3 adiciona keychain do OS e multi-conta&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> lançou &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.3">v1.0.3&lt;/a> com armazenamento local de chave fortalecido usando keychain do OS e fallback de passphrase, suporte multi-conta, e um QR code de bunker tocável que abre o app signer no Android.&lt;/p>
&lt;h3 id="angor-migra-para-nip-44-e-lança-fortalecimento-de-segurança">Angor migra para NIP-44 e lança fortalecimento de segurança&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong>, o app de crowdfunding Bitcoin construído em Nostr e Taproot, lançou três releases instáveis 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> e &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.26">v0.2.26&lt;/a>) com um conjunto de mudanças de fortalecimento de segurança e integração Nostr. &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a> migra a mensageria criptografada Nostr de NIP-04 para NIP-44, substituindo o esquema baseado em XOR descontinuado por criptografia ChaCha20-Poly1305. &lt;a href="https://github.com/block-core/angor/pull/861">PR #861&lt;/a> permite uploads de mídia Blossom sem uma carteira selecionada usando uma chave de auth Nostr efêmera, desbloqueando uploads para usuários que ainda não conectaram uma carteira. A série de segurança abordou várias categorias fortalecidas: &lt;a href="https://github.com/block-core/angor/pull/854">PR #854&lt;/a> adiciona segurança de tipo para AngorKey e proteção de memória de mnemonic, &lt;a href="https://github.com/block-core/angor/pull/856">PR #856&lt;/a> impõe validação em nível de protocolo para timelocks, taxas de fee, limites de dust e regras de penalidade, e &lt;a href="https://github.com/block-core/angor/pull/851">PR #851&lt;/a> aplica fortalecimento não-disruptivo em oito categorias de severidade média e baixa. &lt;a href="https://github.com/block-core/angor/pull/859">PR #859&lt;/a> corrige compatibilidade com GrapheneOS habilitando compilação AOT e removendo geração de código em runtime, e &lt;a href="https://github.com/block-core/angor/pull/855">PR #855&lt;/a> evita perda de carteira em swipe-kill Android persistindo o estado da carteira antes do OS terminar o processo.&lt;/p>
&lt;h3 id="alby-js-sdk-v80-lança-reconexão-multi-relay-nwc">Alby js-sdk v8.0 lança reconexão multi-relay NWC&lt;/h3>
&lt;p>&lt;strong>Alby js-sdk&lt;/strong> lançou a linha v8.0 (&lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.1">v8.0.1&lt;/a> até &lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.3">v8.0.3&lt;/a>) com suporte a subscription NWC multi-relay. &lt;a href="https://github.com/getAlby/js-sdk/pull/516">PR #516&lt;/a> atualiza a dependência nostr-tools e habilita auto-reconexão nativa através de múltiplos relays, substituindo a abordagem anterior de polling por lógica de reconexão nativa de relay. &lt;a href="https://github.com/getAlby/js-sdk/pull/542">PR #542&lt;/a> substitui todas as chamadas &lt;code>console.debug&lt;/code> por uma interface de logger injetável para que desenvolvedores de aplicações possam rotear diagnósticos SDK através de sua própria infraestrutura de logging. A release remove o polyfill WebSocket, exigindo Node.js 22 ou superior para consumidores do lado do servidor. v8.0.2 adicionou uma correção para um bug de import crypto de utils que quebrava certos bundlers.&lt;/p>
&lt;h3 id="keychat-v1411-corrige-forward-secrecy">KeyChat v1.41.1 corrige forward secrecy&lt;/h3>
&lt;p>&lt;strong>KeyChat&lt;/strong>, um app de mensageria que combina o protocolo Signal com transporte de relay Nostr, lançou &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.41.1&amp;#43;6513">v1.41.1+6513&lt;/a>. A correção em destaque impõe forward secrecy excluindo prekeys únicos Signal imediatamente após uma descriptografia bem-sucedida, fechando uma lacuna onde um prekey retido poderia ser usado para descriptografar mensagens passadas se o dispositivo fosse comprometido posteriormente. A release também adiciona preview de URL para mensagens consistindo de um único link, centraliza auto-download de mídia sob um novo &lt;code>FileDownloadManager&lt;/code> com um limite automático de 20 MB, e refatora a busca de info de relay NIP-11 para forçar refresh em cold start para que configurações de fee de relay pago sempre carreguem corretamente.&lt;/p>
&lt;h2 id="em-desenvolvimento">Em desenvolvimento&lt;/h2>
&lt;p>&lt;strong>Citrine&lt;/strong> mesclou &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a> implementando aplicação de NIP-70: o relay Android agora bloqueia reposts que embutem conteúdo de eventos protegidos, como a especificação requer. &lt;a href="https://github.com/greenart7c3/Citrine/pull/149">PR #149&lt;/a> adiciona ações de exibição e cópia para múltiplos endereços de conexão, localhost, Wi-Fi local e Tor, a partir da tela de configurações do relay. &lt;a href="https://github.com/greenart7c3/Citrine/pull/141">PR #141&lt;/a> adiciona tratamento de challenge AUTH NIP-42 através de integração com signer externo Amber.&lt;/p>
&lt;p>&lt;strong>Mostro&lt;/strong> chegou à Fase 2 de seu rollout de bond anti-abuso. &lt;a href="https://github.com/MostroP2P/mostro/pull/737">PR #737&lt;/a> aterrissa a lógica de slash de disputa dirigida pelo solver: handlers de admin agora consomem o payload &lt;code>BondResolution&lt;/code> do mostro-core, permitindo que um admin dê slash no bond de qualquer parte ao resolver uma disputa. A Fase 1.5, mesclada no &lt;a href="https://github.com/MostroP2P/mostro/pull/736">PR #736&lt;/a>, introduziu uma ação dedicada &lt;code>PayBondInvoice&lt;/code> e status &lt;code>WaitingTakerBond&lt;/code>, separando o pagamento do bond anti-abuso do taker do payout de trade do buyer. O cliente mobile adicionou o UX completo da Fase 1.5 no &lt;a href="https://github.com/MostroP2P/mobile/pull/592">PR #592&lt;/a>. Mostro é um protocolo de câmbio Bitcoin peer-to-peer construído no Nostr.&lt;/p>
&lt;p>&lt;strong>Damus&lt;/strong> mesclou &lt;a href="https://github.com/damus-io/damus/pull/3773">PR #3773&lt;/a> restaurando o indicador de sinal de relay, e &lt;a href="https://github.com/damus-io/damus/pull/3775">PR #3775&lt;/a> corrige relays que se recusavam a reconectar após uma falha inicial de conexão.&lt;/p>
&lt;p>&lt;strong>rust-nostr&lt;/strong> mesclou &lt;a href="https://github.com/rust-nostr/nostr/pull/1358">PR #1358&lt;/a> adicionando traits de finalização de eventos e builders de evento específicos de NIP, tornando mais fácil construir eventos corretamente tipados para funções específicas de protocolo. &lt;a href="https://github.com/rust-nostr/nostr/pull/1363">PR #1363&lt;/a> faz backport de uma correção garantindo que o signer NIP-46 se inscreva em notificações antes de enviar a resposta de connect, fechando uma condição de corrida onde mensagens de cliente chegando imediatamente após connect poderiam ser perdidas.&lt;/p>
&lt;p>&lt;strong>dart-nostr&lt;/strong> mesclou &lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">PR #44&lt;/a> adicionando um resolver de relay Namecoin &lt;code>.bit&lt;/code> e registros TLSA pin, permitindo que aplicações Flutter resolvam URLs de relay &lt;code>wss://example.bit/&lt;/code> através de DNS Namecoin para seus endereços WebSocket reais.&lt;/p>
&lt;p>&lt;strong>Dart NDK&lt;/strong> (o kit de desenvolvimento Nostr Dart/Flutter, agora em &lt;code>relaystr/ndk&lt;/code>) mesclou &lt;a href="https://github.com/relaystr/ndk/pull/464">PR #464&lt;/a> implementando NIP-77, o protocolo de assinatura offline de eventos. No lado do signer, &lt;a href="https://github.com/relaystr/ndk/pull/602">PR #602&lt;/a> e &lt;a href="https://github.com/relaystr/ndk/pull/601">PR #601&lt;/a> adicionam um signer de evento específico da web e uma abstração &lt;code>PlatformEventVerifier&lt;/code>, permitindo que apps Flutter web usem o signer da plataforma sem um caminho de código separado; &lt;a href="https://github.com/relaystr/ndk/pull/604">PR #604&lt;/a> introduz uma factory de signer de evento para seleção de signer em runtime. &lt;a href="https://github.com/relaystr/ndk/pull/608">PR #608&lt;/a> adiciona &lt;code>getDmRelays()&lt;/code> para buscar a lista de relays de DM NIP-17 de um usuário (kind:10050), e &lt;a href="https://github.com/relaystr/ndk/pull/600">PR #600&lt;/a> corrige a preservação de campos assinados NIP-46 para que signers remotos não percam campos no round-trip.&lt;/p>
&lt;p>&lt;strong>Pages by Form*&lt;/strong> (&lt;a href="https://github.com/formstr-hq/nostr-docs">repo&lt;/a>), o app colaborativo de documentos Nostr-native do Formstr hospedado em &lt;a href="https://pages.formstr.app">pages.formstr.app&lt;/a>, mesclou quatro PRs esta semana apertando os fluxos de anexo criptografado e gerenciamento de documentos. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/37">PR #37&lt;/a> corrige imagens faltando em exportações DOCX, HTML e PDF fazendo inline de anexos criptografados: busca blobs &lt;code>&amp;lt;encrypted-file&amp;gt;&lt;/code> de servidores Blossom, descriptografa-os com AES-GCM 256-bit usando a chave e nonce armazenados, valida o tipo MIME da imagem e os converte em URLs data base64 para que exportações preservem imagens que só existem no Blossom em forma criptografada. &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/39">PR #39&lt;/a> adiciona um mecanismo de busca local de documentos, &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/38">PR #38&lt;/a> limpa o fluxo de renomear, e &lt;a href="https://github.com/formstr-hq/nostr-docs/pull/40">PR #40&lt;/a> corrige o tratamento de backup compartilhado.&lt;/p>
&lt;p>&lt;strong>Zap Cooking&lt;/strong> mesclou &lt;a href="https://github.com/zapcooking/frontend/pull/396">PR #396&lt;/a>, a primeira fase de uma reformulação de feed que assenta primitivas de renderização de feed sem nenhuma mudança visível ao usuário ainda. O PR introduz um parser de tag &lt;code>imeta&lt;/code> NIP-92 que lê os slots &lt;code>url&lt;/code>, &lt;code>m&lt;/code> (MIME), &lt;code>dim&lt;/code> (dimensões), &lt;code>blurhash&lt;/code>, &lt;code>alt&lt;/code>, &lt;code>x&lt;/code> (hash de arquivo) e &lt;code>fallback&lt;/code>, mais um decodificador blurhash canônico portado à mão (~200 LOC) que produz URLs data PNG via canvas com um fallback null seguro para SSR. Quando tags &lt;code>imeta&lt;/code> estão ausentes, o parser recorre a extrair URLs brutos de imagem e vídeo do conteúdo do evento usando as mesmas heurísticas que o feed atual já usa.&lt;/p>
&lt;p>&lt;strong>Nurunuru&lt;/strong> (ぬるぬる, &lt;code>tami1A84/null--nostr&lt;/code>), um cliente Nostr com variantes nativas Android, iOS e Web compartilhando um motor FFI Rust, mesclou seu sync Native → Web v1.5.0 no &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">PR #176&lt;/a>. O sync traz várias adições de recursos ao build Web que já foram lançadas no Android v1.4.9 e iOS 1.0.4: o &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">NotificationModal&lt;/a> agora apresenta notificações de aniversário, detecção de zap de follow mútuo e notificações de reação com emoji customizado; o picker de reação abandona a linha rápida de reações padrão Unicode e centra o UX em emoji customizado; o motor de recomendação em &lt;code>lib/recommendation.js&lt;/code> filtra usuários sem ícones ou display names e prioriza entradas Following com Recomendado carregando em background. Entrada de voz é o único recurso indo na outra direção: o build Web já usa streaming ElevenLabs Scribe, e v1.5.0 sincroniza parcialmente o lado Nativo para o &lt;code>SpeechRecognizer&lt;/code> padrão do OS (Android) e &lt;code>SFSpeechRecognizer&lt;/code> + &lt;code>AVAudioEngine&lt;/code> (iOS) enquanto a integração completa do Native Scribe é adiada para v1.6.&lt;/p>
&lt;h2 id="trabalho-de-protocolo-e-especificação">Trabalho de protocolo e especificação&lt;/h2>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">#2251&lt;/a>&lt;/strong> aperta a especificação de eventos protegidos NIP-70: agora afirma explicitamente que reposts embutindo o conteúdo completo de um evento protegido devem ser rejeitados pelos relays. NIP-70 define a tag &lt;code>-&lt;/code> que sinaliza que um autor de nota não consente com ter sua nota republicada. A especificação original cobria o comportamento de filtragem do relay, mas deixava o caso de repost ambíguo. Este PR fecha essa lacuna. O &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a> do Citrine implementa a aplicação no lado do relay nesta mesma semana.&lt;/p>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/1653">#1653&lt;/a>&lt;/strong> propõe um NIP de Drafts para salvar e sincronizar eventos de rascunho privados. A proposta usa eventos substituíveis com um status &lt;code>draft&lt;/code> e criptografia NIP-44 para a própria chave do autor, permitindo aos clientes salvar trabalhos em progresso em relays sem que esses eventos sejam visíveis a mais ninguém. O evento draft carrega o evento de publicação pretendida completo como conteúdo criptografado, incluindo seu eventual kind e tags.&lt;/p>
&lt;p>&lt;strong>Snapshots (&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>)&lt;/strong> é uma proposta aberta para definir um evento de snapshot imutável para preservar uma versão exata de um evento Nostr substituível. O evento snapshot carrega o conteúdo completo do evento substituível em um ponto dado no tempo, com uma tag &lt;code>a&lt;/code> ligando-o de volta ao endereço do evento substituível para que todas as versões históricas sejam consultáveis juntas. Isso torna possível para observadores inspecionar estado histórico mesmo após relays pararem de reter versões antigas.&lt;/p>
&lt;p>&lt;strong>Onda de NIP-05 Namecoin:&lt;/strong> Esta semana viu um esforço coordenado para adicionar resolução NIP-05 &lt;code>.bit&lt;/code> a clientes Nostr. O feed de discussão de NIP capturou PRs open-source contra Aegis (&lt;a href="https://github.com/ZharlieW/Aegis/pull/14">#14&lt;/a>, que adiciona verificação no momento da assinatura no signer), nostter (&lt;a href="https://github.com/SnowCait/nostter/pull/2128">#2128&lt;/a>) e dart-nostr (&lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">#44&lt;/a>), junto com um rascunho de NIP upstream (&lt;a href="https://github.com/nostr-protocol/nips/pull/2349">PR #2349&lt;/a>). O PR do Aegis é notável por colocar a verificação no lado produtor: o signer verifica a chain Namecoin antes de assinar qualquer evento kind:0 que reivindique uma identidade &lt;code>.bit&lt;/code> e avisa o usuário em caso de mismatch, capturando o problema antes que o evento chegue a qualquer relay.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-07-windownostr-para-navegadores-web">Deep Dive de NIP: 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 a interface &lt;code>window.nostr&lt;/code> que extensões de navegador expõem a aplicações web. É a interface de signer mais amplamente implantada na web, implementada por extensões incluindo Alby, nos2x, Flamingo e horse.&lt;/p>
&lt;p>A interface tem dois métodos obrigatórios e vários opcionais. &lt;code>window.nostr.getPublicKey()&lt;/code> retorna a chave pública do usuário como uma string hex sem nunca expor a chave privada à página chamadora. &lt;code>window.nostr.signEvent(event)&lt;/code> recebe um evento parcial com &lt;code>created_at&lt;/code>, &lt;code>kind&lt;/code>, &lt;code>tags&lt;/code> e &lt;code>content&lt;/code>, e retorna o evento assinado completo com &lt;code>id&lt;/code>, &lt;code>pubkey&lt;/code> e &lt;code>sig&lt;/code> adicionados. O ponto chave é que a chave privada nunca deixa o contexto isolado da extensão; a aplicação web submete um evento não assinado e recebe de volta um assinado.&lt;/p>
&lt;p>Os métodos opcionais cobrem criptografia: &lt;code>window.nostr.nip04.encrypt&lt;/code> e &lt;code>window.nostr.nip04.decrypt&lt;/code> para o esquema mais antigo NIP-04 (agora descontinuado), e &lt;code>window.nostr.nip44.encrypt&lt;/code> e &lt;code>window.nostr.nip44.decrypt&lt;/code> para o esquema atual NIP-44. Extensões que suportam NIP-44 podem portanto lidar tanto com criptografia de mensagens diretas quanto com qualquer outra aplicação que precise de criptografia com chave por pubkey sem a página chamadora ver a nsec.&lt;/p>
&lt;p>A especificação também inclui uma recomendação aos autores de extensões: carregue scripts com &lt;code>&amp;quot;run_at&amp;quot;: &amp;quot;document_end&amp;quot;&lt;/code> no manifest da extensão para que &lt;code>window.nostr&lt;/code> esteja disponível sincronamente quando a página carrega, evitando condições de corrida onde um cliente verifica &lt;code>window.nostr&lt;/code> antes de a extensão tê-lo injetado.&lt;/p>
&lt;p>Um exemplo chave de NIP-07 em ação é o projeto Keycast coberto acima. O frontend web do Keycast usa NIP-07 para assinar eventos HTTP auth NIP-98: o app SvelteKit nunca manuseia a nsec do usuário diretamente. Ele chama &lt;code>window.nostr.signEvent&lt;/code> para produzir o header de auth, então envia esse header à API do Keycast. Essa arquitetura significa que o material da chave fica na extensão do navegador durante todo o fluxo de gerenciamento de chaves de equipe.&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="deep-dive-de-nip-nip-39-identidades-externas-em-perfis">Deep Dive de NIP: NIP-39 (identidades externas em perfis)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/39.md">NIP-39&lt;/a> define como um usuário Nostr pode declarar controle sobre identidades de plataformas externas em seu perfil. Cada declaração usa uma tag &lt;code>i&lt;/code> dentro de um evento kind:10011, afirmando propriedade de uma conta específica em outra plataforma junto com uma prova que pode ser verificada independentemente.&lt;/p>
&lt;p>Cada tag segue o formato &lt;code>[&amp;quot;i&amp;quot;, &amp;quot;platform:identity&amp;quot;, &amp;quot;proof&amp;quot;]&lt;/code>, onde &lt;code>platform:identity&lt;/code> combina o nome da plataforma e o nome de usuário com um separador de dois-pontos (&lt;code>github:semisol&lt;/code>, &lt;code>twitter:semisol_public&lt;/code>). &lt;code>proof&lt;/code> aponta para um artefato verificável na própria plataforma.&lt;/p>
&lt;p>Para GitHub, a prova é um Gist ID. O usuário cria um Gist público de sua conta GitHub contendo o texto &lt;code>Verifying that I control the following Nostr public key: npub1...&lt;/code>. Um cliente verificando a reivindicação busca &lt;code>https://gist.github.com/&amp;lt;identity&amp;gt;/&amp;lt;proof&amp;gt;&lt;/code> e verifica que o Gist foi criado pelo nome de usuário GitHub reivindicado e contém a pubkey esperada. Para Twitter a prova é um tweet ID, para Mastodon um post ID, e para Telegram uma referência de mensagem em um grupo público.&lt;/p>
&lt;p>O nome do provedor de identidade deve conter apenas &lt;code>a-z&lt;/code>, &lt;code>0-9&lt;/code> e os caracteres &lt;code>._-/&lt;/code>, e não deve conter &lt;code>:&lt;/code>. Nomes de identidade devem ser normalizados para minúsculas, com o alias primário usado quando múltiplos existem.&lt;/p>
&lt;p>A discussão NIP-05 &lt;code>.bit&lt;/code> do Namecoin acontecendo esta semana mostra o papel do NIP-39 na stack de identidade mais ampla: fornece uma forma padronizada e agnóstica a relay de cross-referenciar uma chave Nostr com uma identidade estabelecida em outro lugar, sem exigir nenhuma autoridade de verificação central. Um cliente pode verificar independentemente a prova buscando um artefato público na plataforma nomeada, e a prova está vinculada à pubkey Nostr específica no texto do Gist ou tweet, não a uma credencial genérica da 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>É isso por esta semana. Se você está construindo algo ou tem novidades para compartilhar, mande uma DM para nós no Nostr ou nos encontre em &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/pt/newsletters/2026-05-13-newsletter/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/</guid><description>&lt;p>Bem-vindo ao Nostr Compass, o seu guia semanal sobre o desenvolvimento do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#nostr-vpn-lan%c3%a7a-oito-vers%c3%b5es-culminando-em-v4010">oito versões em sete dias&lt;/a> desde um fluxo de emparelhamento de dispositivos redesenhado até uma troca de AEAD que duplica aproximadamente o débito TCP. O &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> (a fundação do &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>) lança uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#marmotwhite-noise-lan%c3%a7a-frontend-com-bloqueio-completo-e-31-prs-em-mdk-e-backend">versão frontend que completa a funcionalidade de bloqueio de utilizadores&lt;/a> e 31 PRs em MDK e backend. O &lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#grain-v060-adiciona-nip-40-nip-50-nip-70-e-nip-45">v0.6.0&lt;/a> com quatro novas implementações de NIP num único marco. O &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-traz-tor-integrado-e-agrega%c3%a7%c3%a3o-de-relay">v3.0.0-pre1&lt;/a> com Tor integrado e agregação de relay. O &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#amber-v610-pre2-melhora-o-fluxo-de-conex%c3%a3o-de-nova-app">v6.1.0-pre2&lt;/a> com melhorias no fluxo de conexão e assinatura. O &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#alby-hub-v1222-adiciona-p%c3%a1gina-de-ia-e-agentes-e-suporte-ao-core-lightning">v1.22.2&lt;/a> com uma página de IA e Agentes e integração com Core Lightning. O &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lança bonds de taker concorrentes e o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#mostro-lan%c3%a7a-bonds-de-taker-concorrentes-e-mostro-core-v0110">mostro-core v0.11.0&lt;/a>. O &lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#jumble-lan%c3%a7a-cinco-vers%c3%b5es-com-pesquisa-recente-e-persist%c3%aancia-de-conta">cinco versões&lt;/a> com histórico de pesquisa recente e correções de persistência de dados de conta. O &lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#nostrord-lan%c3%a7a-modais-de-partilha-de-grupo-upload-de-media-e-pacotes-arch-linux">três versões&lt;/a> com modais de partilha de grupo e pacotes Arch Linux. O &lt;a href="https://flotilla.social">Flotilla&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#flotilla-180-lan%c3%a7a-videochamadas-renderiza%c3%a7%c3%a3o-de-email-e-men%c3%a7%c3%b5es-de-sala">1.8.0&lt;/a> com videochamadas, renderização de email e menções de sala. O &lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#calendar-by-formstr-lan%c3%a7a-v151-com-agendamento-de-consultas-e-sincroniza%c3%a7%c3%a3o-com-calend%c3%a1rio-android">v1.5.1&lt;/a> com agendamento de consultas e sincronização com o calendário Android. O &lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> lança um Tamagotchi NIP-78 descentralizado com recompensas em sats. As discussões de NIP apresentam Reservas, Serviços de Custódia, Listagens de Alojamento, Zaps Onchain e regras de comunidade verificáveis. Dois mergulhos profundos em NIP cobrem o NIP-78 (dados específicos de app) e o NIP-98 (HTTP Auth).&lt;/p></description><content:encoded>&lt;p>Bem-vindo ao Nostr Compass, o seu guia semanal sobre o desenvolvimento do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#nostr-vpn-lan%c3%a7a-oito-vers%c3%b5es-culminando-em-v4010">oito versões em sete dias&lt;/a> desde um fluxo de emparelhamento de dispositivos redesenhado até uma troca de AEAD que duplica aproximadamente o débito TCP. O &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> (a fundação do &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>) lança uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#marmotwhite-noise-lan%c3%a7a-frontend-com-bloqueio-completo-e-31-prs-em-mdk-e-backend">versão frontend que completa a funcionalidade de bloqueio de utilizadores&lt;/a> e 31 PRs em MDK e backend. O &lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#grain-v060-adiciona-nip-40-nip-50-nip-70-e-nip-45">v0.6.0&lt;/a> com quatro novas implementações de NIP num único marco. O &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-traz-tor-integrado-e-agrega%c3%a7%c3%a3o-de-relay">v3.0.0-pre1&lt;/a> com Tor integrado e agregação de relay. O &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#amber-v610-pre2-melhora-o-fluxo-de-conex%c3%a3o-de-nova-app">v6.1.0-pre2&lt;/a> com melhorias no fluxo de conexão e assinatura. O &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#alby-hub-v1222-adiciona-p%c3%a1gina-de-ia-e-agentes-e-suporte-ao-core-lightning">v1.22.2&lt;/a> com uma página de IA e Agentes e integração com Core Lightning. O &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lança bonds de taker concorrentes e o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#mostro-lan%c3%a7a-bonds-de-taker-concorrentes-e-mostro-core-v0110">mostro-core v0.11.0&lt;/a>. O &lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#jumble-lan%c3%a7a-cinco-vers%c3%b5es-com-pesquisa-recente-e-persist%c3%aancia-de-conta">cinco versões&lt;/a> com histórico de pesquisa recente e correções de persistência de dados de conta. O &lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#nostrord-lan%c3%a7a-modais-de-partilha-de-grupo-upload-de-media-e-pacotes-arch-linux">três versões&lt;/a> com modais de partilha de grupo e pacotes Arch Linux. O &lt;a href="https://flotilla.social">Flotilla&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#flotilla-180-lan%c3%a7a-videochamadas-renderiza%c3%a7%c3%a3o-de-email-e-men%c3%a7%c3%b5es-de-sala">1.8.0&lt;/a> com videochamadas, renderização de email e menções de sala. O &lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-13-newsletter/#calendar-by-formstr-lan%c3%a7a-v151-com-agendamento-de-consultas-e-sincroniza%c3%a7%c3%a3o-com-calend%c3%a1rio-android">v1.5.1&lt;/a> com agendamento de consultas e sincronização com o calendário Android. O &lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> lança um Tamagotchi NIP-78 descentralizado com recompensas em sats. As discussões de NIP apresentam Reservas, Serviços de Custódia, Listagens de Alojamento, Zaps Onchain e regras de comunidade verificáveis. Dois mergulhos profundos em NIP cobrem o NIP-78 (dados específicos de app) e o NIP-98 (HTTP Auth).&lt;/p>
&lt;h2 id="principais-histórias">Principais histórias&lt;/h2>
&lt;h3 id="nostr-vpn-lança-oito-versões-culminando-em-v4010">Nostr VPN lança oito versões culminando em v4.0.10&lt;/h3>
&lt;p>O &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>, a VPN mesh descentralizada baseada em Rust que usa Nostr para descoberta de pares e um protocolo noise apoiado em FIPS para o plano de dados, lançou oito versões de &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> em macOS, Linux, Windows e Android esta semana.&lt;/p>
&lt;p>A mudança principal está no &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.8">v4.0.8&lt;/a>: o AEAD foi trocado do backend soft &lt;code>chacha20poly1305&lt;/code> do RustCrypto para o ChaCha20-Poly1305 do BoringSSL no &lt;code>ring&lt;/code> 0.17, que usa NEON otimizado manualmente em aarch64 e AVX2/AVX-512 em x86_64. Os benchmarks Docker em hardware idêntico mostraram o débito TCP direto de 2 nós a saltar de 437 para 1097 Mbps. O formato wire não foi alterado.&lt;/p>
&lt;p>No início da semana, o &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> reconstruiu o fluxo de emparelhamento de dispositivos com proteção contra fuga de nó de saída, um bloco de configuração WireGuard unificado em Nós de Saída e artefactos macOS assinados e notarizados. O &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.2">v4.0.2&lt;/a> melhorou a descoberta LAN com sockets multicast reutilizáveis para que pares na mesma LAN prefiram caminhos de underlay diretos. O &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.9">v4.0.9&lt;/a> adicionou batching &lt;code>sendmmsg(2)&lt;/code> no caminho de envio UDP, empurrando o stream único TCP de 1066 para 1548 Mbps (1,45×). O &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> lançou uma revisão completa de UX para emparelhamento de dispositivos: Convidar Dispositivos e Aderir à Rede são agora cartões separados, a importação automática dispara ao colar uma string &lt;code>nvpn://invite/&lt;/code>, e o emparelhamento próximo dividiu-se em dois toggles independentes de 15 minutos.&lt;/p>
&lt;h3 id="marmotwhite-noise-lança-frontend-com-bloqueio-completo-e-31-prs-em-mdk-e-backend">Marmot/White Noise lança frontend com bloqueio completo e 31 PRs em MDK e backend&lt;/h3>
&lt;p>O &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, a app de mensagens de grupo privadas construída sobre o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> baseado em MLS, lançou &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.7&amp;#43;24">v2026.5.7+24&lt;/a> a 7 de maio como a versão frontend que completa o conjunto de funcionalidades de bloqueio. A versão anterior lançou silêncio, pesquisa e arquivo; esta conclui o bloqueio. Um utilizador bloqueado fica agora oculto de convites, pré-visualizações de chat, linhas de tempo de mensagens, resultados de pesquisa e notificações, e as suas mensagens deixam de contar para os contadores de não lidos. Os anexos de vídeo funcionam de ponta a ponta em todos os dispositivos. O aviso de offline cobre agora todos os ecrãs.&lt;/p>
&lt;p>O trabalho de suporte abrange 31 PRs em MDK e backend. O MDK recebeu a &lt;a href="https://github.com/marmot-protocol/mdk/pull/258">PR #258&lt;/a> com o formato wire da extensão v3 e o esquema &lt;code>disappearing_message_secs&lt;/code>, preparando o terreno para mensagens temporárias.&lt;/p>
&lt;p>O trabalho de frontend inclui a &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/653">PR #653&lt;/a> que corrige resumos de chats arquivados usando uma consulta pontual para que os chats arquivados sejam renderizados corretamente, a &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/644">PR #644&lt;/a> que expõe um stream &lt;code>subscribe_to_group_state&lt;/code> ao Dart para atualizações reativas de UI, e a &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/635">PR #635&lt;/a> que corrige a recuperação de notificações de signatário externo Android quando a app de assinatura é iniciada a frio.&lt;/p>
&lt;h3 id="grain-v060-adiciona-nip-40-nip-50-nip-70-e-nip-45">Grain v0.6.0 adiciona NIP-40, NIP-50, NIP-70 e NIP-45&lt;/h3>
&lt;p>O &lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a>, o relay Nostr e biblioteca de cliente baseados em Go, lançou &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.6.0">v0.6.0&lt;/a> a 6 de maio com quatro novas implementações de NIP e uma passagem de reforço de produção. O marco v0.6 adiciona expiração de eventos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/40.md">NIP-40&lt;/a>, pesquisa 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> e contagem de eventos &lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">NIP-45&lt;/a>.&lt;/p>
&lt;p>A expiração de eventos via NIP-40 permite aos publicadores definir um timestamp de expiração para que o relay descarte eventos após expiração. A pesquisa de texto completo NIP-50 permite que clientes emitam filtros &lt;code>search&lt;/code> em mensagens REQ. Os eventos protegidos via NIP-70 impedem relays de partilhar eventos sem permissão explícita do autor. As consultas de contagem NIP-45 permitem que clientes peçam a um relay para devolver uma contagem de eventos correspondentes, reduzindo a largura de banda para consultas do tipo &amp;ldquo;quantas notas tem este utilizador&amp;rdquo;.&lt;/p>
&lt;p>A versão também inclui reforço de produção: configurações padrão mais seguras, respostas de rejeição NIP-01 corrigidas e melhor contrapressão para consumidores lentos.&lt;/p>
&lt;h2 id="lançamentos-desta-semana">Lançamentos desta semana&lt;/h2>
&lt;h3 id="citrine-v300-pre1-traz-tor-integrado-e-agregação-de-relay">Citrine v3.0.0-pre1 traz Tor integrado e agregação de relay&lt;/h3>
&lt;p>O &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>, a app Android que transforma um telemóvel num nó relay Nostr, lançou &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">v3.0.0-pre1&lt;/a> como pré-lançamento esta semana. As principais adições são suporte Tor integrado para acesso a relay que preserva a privacidade e agregação de relay, onde o Citrine pode recolher eventos de múltiplos relays upstream e servi-los a clientes locais. A &lt;a href="https://github.com/greenart7c3/Citrine/pull/139">PR #139&lt;/a> adiciona suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-77/">NIP-77 (Reconciliação Negentropy)&lt;/a> para sincronização de eventos eficiente baseada em reconciliação de conjuntos. A &lt;a href="https://github.com/greenart7c3/Citrine/pull/137">PR #137&lt;/a> encaminha todos os URLs através do proxy Tor, a &lt;a href="https://github.com/greenart7c3/Citrine/pull/133">PR #133&lt;/a> alivia a pressão na thread de UI no caminho de receção de eventos, e a &lt;a href="https://github.com/greenart7c3/Citrine/pull/132">PR #132&lt;/a> reduz o consumo de bateria do agregador de relay. A versão também adiciona uma vista de análise de eventos com um gráfico circular que divide os eventos armazenados por tipo.&lt;/p>
&lt;h3 id="amber-v610-pre2-melhora-o-fluxo-de-conexão-de-nova-app">Amber v6.1.0-pre2 melhora o fluxo de conexão de nova app&lt;/h3>
&lt;p>O &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, a app Android de assinatura para &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55 (Aplicação de Assinatura Android)&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, lançou &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre2">v6.1.0-pre2&lt;/a>. As principais correções: o diálogo de assinatura fecha agora corretamente após aceitar um pedido bunker, pedidos bunker malformados mostram um ecrã de pedido inválido, e é adicionada limitação de taxa para pedidos de assinatura baseados em intent. A &lt;a href="https://github.com/greenart7c3/Amber/pull/430">PR #430&lt;/a> corrige fugas de memória e ineficiências no caminho de assinatura.&lt;/p>
&lt;h3 id="alby-hub-v1222-adiciona-página-de-ia-e-agentes-e-suporte-ao-core-lightning">Alby Hub v1.22.2 adiciona página de IA e Agentes e suporte ao Core Lightning&lt;/h3>
&lt;p>O &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>, o nó Lightning auto-custodial e servidor Nostr Wallet Connect, lançou &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.22.2">v1.22.2&lt;/a> com várias adições importantes. A nova página de IA e Agentes expõe as capacidades Lightning e NWC do Alby Hub a agentes de IA e ferramentas compatíveis com MCP. Um modo de carteira onchain integrado permite aos utilizadores receber e enviar Bitcoin onchain diretamente do Alby Hub. Rótulos personalizados para transações melhoram a contabilidade. As páginas de definições foram redesenhadas para maior clareza. A funcionalidade mais solicitada desde o lançamento chegou: Core Lightning (CLN) é agora um backend suportado a par do LND e LDK.&lt;/p>
&lt;h3 id="mostro-lança-bonds-de-taker-concorrentes-e-mostro-core-v0110">Mostro lança bonds de taker concorrentes e mostro-core v0.11.0&lt;/h3>
&lt;p>O &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, o protocolo de negociação Bitcoin peer-to-peer no Nostr, fundiu 11 PRs esta semana avançando a funcionalidade de bond de taker que previne griefing ao exigir que ambas as partes bloqueiem fundos antes de uma negociação prosseguir. A &lt;a href="https://github.com/MostroP2P/mostro/pull/733">PR #733&lt;/a> implementa bonds de taker concorrentes onde múltiplos takers podem submeter faturas de bond simultaneamente e o primeiro a bloquear ganha, descartando os outros. A &lt;a href="https://github.com/MostroP2P/mostro/pull/735">PR #735&lt;/a> alinha o memo da fatura de bond com a secção 6.1 da especificação.&lt;/p>
&lt;p>O &lt;a href="https://github.com/MostroP2P/mostro-core">mostro-core&lt;/a> lançou &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.11.0">v0.11.0&lt;/a> com as adições correspondentes à biblioteca: a &lt;a href="https://github.com/MostroP2P/mostro-core/pull/144">PR #144&lt;/a> adiciona &lt;code>Action::PayBondInvoice&lt;/code> e &lt;code>Status::WaitingTakerBond&lt;/code>, e a &lt;a href="https://github.com/MostroP2P/mostro-core/pull/143">PR #143&lt;/a> adiciona o payload &lt;code>BondResolution&lt;/code> para ações de liquidação e cancelamento de administrador. O &lt;a href="https://github.com/MostroP2P/mostro-cli">mostro-cli&lt;/a> lançou &lt;a href="https://github.com/MostroP2P/mostro-cli/releases/tag/v0.15.0">v0.15.0&lt;/a> atualizando para mostro-core 0.11.0.&lt;/p>
&lt;h3 id="jumble-lança-cinco-versões-com-pesquisa-recente-e-persistência-de-conta">Jumble lança cinco versões com pesquisa recente e persistência de conta&lt;/h3>
&lt;p>O &lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, o cliente Nostr centrado em relay disponível como app web e app desktop Electron, lançou cinco versões 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>. O v26.5.2 agrupa notificações por Hoje / Esta semana / Este mês / Anteriores com cabeçalhos de data fixos. O v26.5.3 lança um &lt;code>.zip&lt;/code> macOS a par do &lt;code>.dmg&lt;/code> para que a versão desktop Electron possa aplicar atualizações automáticas no local. O v26.5.4 adiciona um seletor de emoji implementado internamente com abas de pacotes de emoji. O v26.5.5 adiciona histórico de pesquisa recente. Um bug crítico de persistência é corrigido no v26.5.6: as contas e dados em cache sobrevivem agora a um reinício completo da app.&lt;/p>
&lt;h3 id="nostrord-lança-modais-de-partilha-de-grupo-upload-de-media-e-pacotes-arch-linux">Nostrord lança modais de partilha de grupo, upload de media e pacotes Arch Linux&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a>, um cliente Nostr direcionado a grupos baseados em relay NIP-29, lançou &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> e &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.2">v1.0.2&lt;/a> esta semana. O v1.0.1 lança pacotes Arch Linux via AUR como &lt;code>nostrord-bin&lt;/code> com artefactos &lt;code>.pkg.tar.zst&lt;/code> assinados com PGP (&lt;a href="https://github.com/nostrord/nostrord/pull/44">PR #44&lt;/a>), um botão para saltar para o mais recente quando se está a rolar para cima num canal ativo (&lt;a href="https://github.com/nostrord/nostrord/pull/45">PR #45&lt;/a>), e colagem de imagem e media diretamente no input de chat (&lt;a href="https://github.com/nostrord/nostrord/pull/46">PR #46&lt;/a>). O v1.0.2 adiciona partilha de grupo via &lt;a href="https://github.com/nostrord/nostrord/pull/49">PR #49&lt;/a> com um modal de partilha que gera tanto um URI &lt;code>nostr:naddr&lt;/code> (kind 39000, NIP-19 + NIP-21) como um link &lt;code>nostrord.com/open/&lt;/code> compatível com web.&lt;/p>
&lt;h3 id="fips-v030-lança-alcance-multiplataforma-descoberta-de-pares-nostr-e-gateway-para-lans-não-modificadas">FIPS v0.3.0 lança alcance multiplataforma, descoberta de pares Nostr e gateway para LANs não modificadas&lt;/h3>
&lt;p>O &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> (Free Internetworking Peering System), o projeto de rede mesh nativo de Nostr coberto no &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#fips-adiciona-bootstrap-udpnat-baseado-em-nostr">#20&lt;/a>, lançou &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.3.0">v0.3.0&lt;/a> esta semana, um marco importante que alarga o projeto de Linux-only para Linux, macOS, Windows e OpenWrt.&lt;/p>
&lt;p>A principal adição é a descoberta de pares mediada por Nostr com travessia NAT UDP assistida por STUN. Os nós publicam agora anúncios de overlay assinados como eventos substituíveis parametrizados kind:37195 em relays Nostr públicos. Quando ambos os pares estão atrás de NAT, o daemon coordena um hole punch usando sinalização &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> para a troca offer/answer.&lt;/p>
&lt;p>Um novo binário &lt;code>fips-gateway&lt;/code> permite que hosts LAN não modificados alcancem destinos mesh sem executar o daemon FIPS. A mesma troca ring 0.17 ChaCha20-Poly1305 que impulsionou o salto de débito do Nostr VPN esta semana também chega ao FIPS v0.3.0. Os benchmarks em aarch64 mostram o stream único TCP de dois nós a passar de 437 para 1097 Mbps e a latência de ping do caminho de relay de três nós a cair de uma média de 7,68 ms para 0,72 ms.&lt;/p>
&lt;h3 id="camelus-v1101-lança-versões-desktop">Camelus v1.10.1 lança versões desktop&lt;/h3>
&lt;p>O &lt;a href="https://github.com/leo-lox/camelus">Camelus&lt;/a>, o cliente Nostr para Android e desktop, lançou &lt;a href="https://github.com/leo-lox/camelus/releases/tag/v1.10.1">v1.10.1&lt;/a> com versões desktop para Windows e Linux, expandindo de uma distribuição apenas para dispositivos móveis.&lt;/p>
&lt;h3 id="flotilla-180-lança-videochamadas-renderização-de-email-e-menções-de-sala">Flotilla 1.8.0 lança videochamadas, renderização de email e menções de sala&lt;/h3>
&lt;p>O &lt;a href="https://flotilla.social">Flotilla&lt;/a>, a app de chat de grupo baseada em relay &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> do hodlbod, lançou &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.8.0">1.8.0&lt;/a> esta semana com várias adições notáveis. As salas de voz suportam agora vídeo: os participantes podem ligar câmaras ou partilhar o ecrã durante uma chamada. A renderização de email chega através de uma atualização à biblioteca welshman: o Flotilla pode agora receber mensagens que incorporam conteúdo de email HTML, renderizando o HTML inline com formatação, imagens e links intactos. As menções de sala permitem que os utilizadores referenciem outras salas e relays com links inline clicáveis. A pesquisa de espaço inclui agora conteúdo de mensagens e correspondências locais para além dos nomes de canais.&lt;/p>
&lt;h3 id="calendar-by-formstr-lança-v151-com-agendamento-de-consultas-e-sincronização-com-calendário-android">Calendar by Formstr lança v1.5.1 com agendamento de consultas e sincronização com calendário Android&lt;/h3>
&lt;p>O &lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a> (&lt;a href="https://github.com/formstr-hq/nostr-calendar">github.com/formstr-hq/nostr-calendar&lt;/a>), uma app de calendário nativa Nostr para eventos públicos e privados, lançou &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.0">v1.5.0&lt;/a> a 10 de maio e &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.1">v1.5.1&lt;/a> a 11 de maio. O agendamento de consultas chega na &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/89">PR #89&lt;/a>, permitindo que os utilizadores criem slots de tempo reserváveis no seu calendário. A integração de calendário Android somente leitura na &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/123">PR #123&lt;/a> sincroniza eventos Nostr com o calendário do dispositivo. As notificações de eventos chegam na &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/130">PR #130&lt;/a>. O v1.5.1 segue com uma correção de bug de URL e atualização de metadados ZSP.&lt;/p>
&lt;h2 id="em-desenvolvimento">Em desenvolvimento&lt;/h2>
&lt;h3 id="amethyst-adiciona-posts-agendados-regras-de-comunidade-nip-9a-e-relay-local-desktop">Amethyst adiciona posts agendados, regras de comunidade NIP-9A e relay local desktop&lt;/h3>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android rico em funcionalidades, fundiu 78 PRs esta semana em várias áreas de funcionalidades importantes.&lt;/p>
&lt;p>Os posts agendados chegam ao Android na &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2765">PR #2765&lt;/a>: os utilizadores podem compor uma nota e definir um tempo de publicação futuro, com a fila gerida localmente no dispositivo. Uma versão desktop ganha um relay local embutido com persistência de eventos SQLite na &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2841">PR #2841&lt;/a>.&lt;/p>
&lt;p>Três PRs implementam regras de comunidade NIP-9A diretamente no cliente: a &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2798">PR #2798&lt;/a> valida posts contra regras de comunidade no compositor antes de enviar, a &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2799">PR #2799&lt;/a> adiciona um editor de regras NIP-9A estruturado ao fluxo de nova comunidade, e a &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2800">PR #2800&lt;/a> adiciona um filtro de feed NIP-9A opcional. A &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2812">PR #2812&lt;/a> redige segredos e payloads sensíveis dos logs de debug. A &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2821">PR #2821&lt;/a> adiciona tags ricas &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92 (imeta)&lt;/a> a cada evento HLS publicado e autopublica uma nota kind:1 auxiliar para que as transmissões ao vivo apareçam em feeds padrão.&lt;/p>
&lt;h3 id="shopstr-adiciona-registo-de-auditoria-mcp-e-segurança-de-sessão">Shopstr adiciona registo de auditoria MCP e segurança de sessão&lt;/h3>
&lt;p>O &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, o mercado descentralizado no Nostr, fundiu cinco PRs esta semana. O registo de auditoria para a camada de ferramentas MCP chega na &lt;a href="https://github.com/shopstr-eng/shopstr/pull/456">PR #456&lt;/a>. A segurança de sessão reforça-se na &lt;a href="https://github.com/shopstr-eng/shopstr/pull/477">PR #477&lt;/a>, que fixa sessões MCP à sua chave API de origem e adiciona desalocação por TTL para evitar sequestro de sessão.&lt;/p>
&lt;h3 id="dart-ndk-adiciona-suporte-web-e-verificação-de-assinatura-de-seal">Dart NDK adiciona suporte web e verificação de assinatura de seal&lt;/h3>
&lt;p>O &lt;a href="https://github.com/relaystr/dart_ndk">Dart NDK&lt;/a>, a biblioteca Dart para desenvolvimento de protocolo Nostr usada em apps Flutter, fundiu seis PRs esta semana. O suporte web chega no &lt;code>SembastCacheManager&lt;/code> via &lt;a href="https://github.com/relaystr/dart_ndk/pull/571">PR #571&lt;/a>. A verificação de assinatura de seal chega na &lt;a href="https://github.com/relaystr/dart_ndk/pull/595">PR #595&lt;/a> para o fluxo &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a>.&lt;/p>
&lt;h3 id="rust-nostr-refatora-tags-e-conexão-proxy">rust-nostr refatora tags e conexão proxy&lt;/h3>
&lt;p>O &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>, o SDK Rust com bindings para Python, Kotlin, Swift e JavaScript, fundiu três PRs esta semana. A &lt;a href="https://github.com/rust-nostr/nostr/pull/1347">PR #1347&lt;/a> é uma grande reformulação de tags que normaliza o acesso a tags em todo o SDK. A &lt;a href="https://github.com/rust-nostr/nostr/pull/1351">PR #1351&lt;/a> substitui o tipo &lt;code>Connection&lt;/code> por &lt;code>Proxy&lt;/code> na camada SDK.&lt;/p>
&lt;h3 id="sprout-lança-v0010-e-v0011">Sprout lança v0.0.10 e v0.0.11&lt;/h3>
&lt;p>O &lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, o cliente Nostr e relay da Block coberto no &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-06-newsletter/#sprout-lan%C3%A7a-desktop-v004-e-v005-juntamente-com-autentica%C3%A7%C3%A3o-de-agente-nip-oa-e-o-sidecar-relay-de-emparelhamento">#21&lt;/a>, lançou &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.10">v0.0.10&lt;/a> e &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.11">v0.0.11&lt;/a> com melhorias no autocompletar de menções, suporte para download de imagens e correções de tratamento de erros de agentes.&lt;/p>
&lt;h3 id="clave-continua-o-rollout-de-nostrconnect-multi-conta">Clave continua o rollout de NostrConnect multi-conta&lt;/h3>
&lt;p>O &lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>, o signatário remoto iOS NIP-46 coberto no &lt;a href="https://nostrcompass.org/pt/newsletters/2026-05-06-newsletter/#clave-v020-lan%C3%A7a-multi-conta-no-ios-com-assinatura-nip-46-nostr-connect">#21&lt;/a>, lançou versões adicionais esta semana avançando o trabalho de NostrConnect multi-conta. A &lt;a href="https://github.com/DocNR/clave/pull/52">PR #52&lt;/a> promove o Connect de uma folha apresentada a partir da vista principal para um tab de nível superior entre contas. Uma correção de segurança no build 71 fecha um bypass do limite de 5 ligações por conta.&lt;/p>
&lt;h2 id="novos-projetos">Novos projetos&lt;/h2>
&lt;h3 id="tamagostrich-lança-um-tamagotchi-nip-78-descentralizado-com-recompensas-em-sats">Tamagostrich lança um Tamagotchi NIP-78 descentralizado com recompensas em sats&lt;/h3>
&lt;p>O &lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> é um jogo de animal de estimação virtual baseado em browser lançado no IDENTITY Hackathon 2026 onde um avestruz bebé, Nori, evolui através da atividade social Nostr do utilizador. O estado do animal vive num evento &lt;a href="https://nostrcompass.org/pt/topics/nip-78/">NIP-78&lt;/a> kind:30078 para que sincronize em todos os dispositivos que partilham o mesmo par de chaves. Zaps, reações, reposts e novos seguidores concedem XP; sem atividade, a felicidade e energia decaem 100 pontos por 24 horas. As recompensas de marco pagam em sats automaticamente via &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>: 50 sats no nível 5, 210 sats no nível 10 e 420 sats no nível máximo 21.&lt;/p>
&lt;h2 id="trabalho-de-protocolo-e-especificação">Trabalho de protocolo e especificação&lt;/h2>
&lt;p>O repositório de NIPs fundiu a &lt;a href="https://github.com/nostr-protocol/nips/pull/2338">PR #2338&lt;/a> corrigindo links de referência README para tipos de eventos Marmot e o kind geocaching 37516. Cinco novas propostas abriram esta semana:&lt;/p>
&lt;p>A &lt;a href="https://github.com/nostr-protocol/nips/pull/2331">PR #2331&lt;/a> propõe o &lt;strong>NIP-9A: Regras de Comunidade Verificáveis&lt;/strong>, introduzindo kind:34551, um evento substituível parametrizado que permite ao proprietário de uma comunidade publicar um documento de regras legível por máquina e assinado criptograficamente. Os clientes obtêm as regras antes de o utilizador submeter um post e rejeitam o rascunho localmente se violar alguma regra.&lt;/p>
&lt;p>A &lt;a href="https://github.com/nostr-protocol/nips/pull/2335">PR #2335&lt;/a> propõe &lt;strong>Eventos de Reserva para Mercados Nostr&lt;/strong>, definindo kind:32122 (eventos de reserva substituíveis parametrizados), kind:1326 (registos de auditoria de transição apenas de adição) e kind:32124 (avaliações pós-negociação). A negociação é privada: os rascunhos de propostas são enviados como eventos filho de mensagem estruturada embrulhados em gift wrap NIP-59 entre comprador e vendedor.&lt;/p>
&lt;p>A &lt;a href="https://github.com/nostr-protocol/nips/pull/2334">PR #2334&lt;/a> propõe &lt;strong>Serviços de Custódia para Mercados Nostr&lt;/strong>, usando kind:30303 para operadores de custódia declararem o seu endereço de contrato EVM, hash de bytecode, cadeia suportada, tabela de taxas e tokens aceites.&lt;/p>
&lt;p>A &lt;a href="https://github.com/nostr-protocol/nips/pull/2333">PR #2333&lt;/a> propõe &lt;strong>Perfis de Listagem de Alojamento para Listagens de Mercado NIP-99&lt;/strong>, estendendo as listagens classificadas NIP-99 com tags de índice geoespacial H3 e campos promovidos específicos de alojamento para listagens de arrendamento de curta duração.&lt;/p>
&lt;p>A &lt;a href="https://github.com/nostr-protocol/nips/pull/2332">PR #2332&lt;/a> propõe &lt;strong>NIP-BC: Zaps Onchain (kind 8333)&lt;/strong>, explorando uma identidade direta entre chaves Nostr e endereços Bitcoin Taproot: uma pubkey Nostr é uma chave secp256k1 x-only de 32 bytes, tal como uma chave interna BIP-341 P2TR, o que significa que qualquer utilizador Nostr já tem um endereço Bitcoin mainnet determinístico derivável da sua pubkey, sem necessidade de LNURL, custodiante ou endereço Lightning.&lt;/p>
&lt;h2 id="mergulho-profundo-em-nip-nip-78-dados-específicos-de-app">Mergulho profundo em NIP: NIP-78 (Dados específicos de app)&lt;/h2>
&lt;p>O &lt;a href="https://nostrcompass.org/pt/topics/nip-78/">NIP-78&lt;/a> define uma forma padrão para as aplicações armazenarem dados arbitrários privados ou públicos em nome de um utilizador usando eventos Nostr. O tipo de evento principal é 30078, um evento substituível parametrizado onde a tag &lt;code>d&lt;/code> é uma string de identificador definida pela aplicação. Uma aplicação dá ao seu slot de armazenamento uma tag &lt;code>d&lt;/code> única (por exemplo &lt;code>tamagostrich-pet-state&lt;/code> ou &lt;code>amethyst-settings&lt;/code>) e publica um evento 30078 com o conteúdo JSON ou texto que precisa de persistir. Como 30078 é substituível e com âmbito por tag &lt;code>d&lt;/code>, a aplicação pode atualizar o estado armazenado publicando um novo evento com a mesma tag &lt;code>d&lt;/code>, e o relay retém apenas a versão mais recente.&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;hex de 64 caracteres&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;hex de 64 caracteres&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;hex de 128 caracteres&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>A motivação principal é a sincronização entre dispositivos sem um servidor centralizado. Qualquer cliente que conheça a chave pública de um utilizador e a tag &lt;code>d&lt;/code> da aplicação pode obter o estado atual do conjunto de relays do utilizador e reconstruir o estado da aplicação em qualquer dispositivo. O utilizador é dono dos dados porque vivem em eventos assinados pelo seu par de chaves.&lt;/p>
&lt;p>Para dados de aplicação privados, os eventos NIP-78 podem encriptar o campo de conteúdo usando &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44 (Encriptação Versionada)&lt;/a> ou o mais antigo &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> antes de publicar. Para dados de aplicação públicos, como os distintivos de conquista do Tamagostrich exibidos no perfil do utilizador, podem ser armazenados sem encriptação.&lt;/p>
&lt;p>A especificação deixa deliberadamente o formato do conteúdo em aberto. As aplicações escolhem o seu próprio esquema; o NIP-78 apenas padroniza o tipo de evento e o mecanismo de âmbito por tag &lt;code>d&lt;/code>.&lt;/p>
&lt;p>Os utilizadores atuais do NIP-78 incluem o Tamagostrich (sincronização de estado do animal), o Wisp (backup de carteira kind:30078 e sincronização de definições de segurança entre dispositivos), o NosPress (estado de orquestração CMS) e várias implementações de sincronização de definições de cliente Nostr.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Fontes primárias:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">Especificação NIP-78&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a>: implementação em produção esta semana&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Ver também:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51: Listas&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65: Metadados de Lista de Relay&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="mergulho-profundo-em-nip-nip-98-http-auth">Mergulho profundo em NIP: NIP-98 (HTTP Auth)&lt;/h2>
&lt;p>O &lt;a href="https://nostrcompass.org/pt/topics/nip-98/">NIP-98&lt;/a> define um esquema de autenticação HTTP que permite que pares de chaves Nostr autorizem pedidos a servidores HTTP, eliminando a necessidade de nomes de utilizador, palavras-passe ou tokens OAuth para acesso a API do lado do servidor. Um cliente constrói um evento Nostr de curta duração do kind 27235, assina-o com a sua chave privada, codifica o JSON em base64 e envia-o num cabeçalho 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;hex de 64 caracteres&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;hex de 64 caracteres&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;hash-sha256-do-corpo-do-pedido&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;hex de 128 caracteres&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>O evento kind 27235 inclui o método HTTP numa tag &lt;code>method&lt;/code>, o URL completo do pedido numa tag &lt;code>u&lt;/code> e um timestamp &lt;code>created_at&lt;/code>. O servidor valida a assinatura, verifica que o método e URL correspondem ao pedido real, e confirma que o timestamp é recente (dentro de alguns minutos) para evitar ataques de replay.&lt;/p>
&lt;p>O design significa que qualquer servidor que implemente NIP-98 pode autenticar utilizadores Nostr sem qualquer registo prévio, criação de conta ou segredo partilhado. Da perspetiva do utilizador, a autenticação é transparente: a sua chave de assinatura Nostr é também a sua credencial de API.&lt;/p>
&lt;p>O NIP-98 é usado no Blossom (&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01&lt;/a>) para autenticar uploads e downloads de blobs. O Routstr usa-o para controlo de acesso à API HTTP por pedido com RBAC a nível de npub. O Sprout usa-o para autenticação de transporte git e acesso REST ao relay. O Clave usa-o para chamadas de emparelhamento proxy. O Alby Hub usa autenticação derivada de NIP-98 para a sua API de administração, e o Nostr.build usa-o para autorização de upload.&lt;/p>
&lt;p>A especificação define uma extensão opcional: uma tag &lt;code>payload&lt;/code> contendo o hash SHA-256 do corpo do pedido, que permite ao servidor verificar que o evento assinado e o corpo do pedido foram criados juntos, impedindo um MITM de substituir um corpo diferente após o cliente ter assinado o evento de autenticação.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>Fontes primárias:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">Especificação NIP-98&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01: Autenticação de upload Blossom&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Ver também:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96: Integração de Armazenamento de Ficheiros HTTP&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Nostr Compass #21</title><link>https://nostrcompass.org/pt/newsletters/2026-05-06-newsletter/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-05-06-newsletter/</guid><description>&lt;p>Bem-vindo ao Nostr Compass, o seu guia semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Marmot Protocol lança o MDK 0.8.0 com os primeiros primitivos de notificação MIP-05, pacotes de chaves NIP-51 endereçáveis e uma revisão de segurança reforçada. O LaWallet NWC lança v0.10.0, o maior lançamento desde o financiamento OpenSats, trazendo um painel de administração completo, carteira para o utilizador, registo de atividade de ponta a ponta e o novo esquema LightningAddress 1→N e NWCConnection. O Amethyst realiza um sprint de estabilização do Nests com eliminação de falhas de áudio durante a renovação JWT, subscrições de dados de chave com consciência do ciclo de vida, reconexão keep-alive de relay e um indicador animado do participante que está a falar. O ngit lança v2.4.2 e v2.4.3 corrigindo a deteção de servidores GRASP para submissões de PR e a filtragem de eventos de estado multi-remote. O GRAIN lança v0.5.4 com reforço de produção e uma correção silenciosa de perda de dados. O Mostro Core lança v0.10.1 com artefactos de lançamento assinados com PGP. O Clave lança v0.2.0 com suporte a múltiplas contas no iOS.&lt;/p></description><content:encoded>&lt;p>Bem-vindo ao Nostr Compass, o seu guia semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Marmot Protocol lança o MDK 0.8.0 com os primeiros primitivos de notificação MIP-05, pacotes de chaves NIP-51 endereçáveis e uma revisão de segurança reforçada. O LaWallet NWC lança v0.10.0, o maior lançamento desde o financiamento OpenSats, trazendo um painel de administração completo, carteira para o utilizador, registo de atividade de ponta a ponta e o novo esquema LightningAddress 1→N e NWCConnection. O Amethyst realiza um sprint de estabilização do Nests com eliminação de falhas de áudio durante a renovação JWT, subscrições de dados de chave com consciência do ciclo de vida, reconexão keep-alive de relay e um indicador animado do participante que está a falar. O ngit lança v2.4.2 e v2.4.3 corrigindo a deteção de servidores GRASP para submissões de PR e a filtragem de eventos de estado multi-remote. O GRAIN lança v0.5.4 com reforço de produção e uma correção silenciosa de perda de dados. O Mostro Core lança v0.10.1 com artefactos de lançamento assinados com PGP. O Clave lança v0.2.0 com suporte a múltiplas contas no iOS.&lt;/p>
&lt;h2 id="principais-histórias">Principais histórias&lt;/h2>
&lt;h3 id="mdk-080-adiciona-primitivos-de-notificação-mip-05-e-pacotes-de-chaves-endereçáveis">MDK 0.8.0 adiciona primitivos de notificação MIP-05 e pacotes de chaves endereçáveis&lt;/h3>
&lt;p>O MDK, a biblioteca central em Rust do protocolo Marmot, lançou v0.8.0 a 4 de maio. Este lançamento inclui os primeiros blocos de construção de notificação MIP-05, move os pacotes de chaves MIP-00 para eventos endereçáveis para que o pacote de chaves de um utilizador possa ser substituído no lugar, melhora a compatibilidade de grupos com versões mistas, expande a cobertura UniFFI para bindings móveis e reforça os caminhos de validação em torno de ações administrativas, commits, armazenamento, limites de encriptação e tratamento de replays. Os primitivos MIP-05 incluem helpers de índice de folha adicionados na PR #235, que fornecem aos clientes downstream informação suficiente para entregar notificações push por destinatário sem revelar a estrutura do grupo. A PR #273 restaura a publicação de mdk-core no crates.io, e a PR #269 expõe o módulo test_util por trás de uma funcionalidade Cargo test-utils para que suites de testes de clientes externos possam partilhar o harness de testes do Marmot.&lt;/p>
&lt;h3 id="lawallet-nwc-v0100-lança-o-monorepo-completo-e-a-carteira-para-utilizador">LaWallet NWC v0.10.0 lança o monorepo completo e a carteira para utilizador&lt;/h3>
&lt;p>O LaWallet NWC, a implementação NIP-47 Nostr Wallet Connect da equipa LaWallet, lançou v0.10.0 a 30 de abril. Este é o maior lançamento desde que o projeto recebeu financiamento OpenSats. Inclui o monorepo completo, o painel de administração completo, uma carteira para utilizador, um registo de atividade de ponta a ponta, branding dinâmico e o novo esquema LightningAddress 1→N e NWCConnection. A carteira voltada para o utilizador lançada na PR #191 cobre integração, início, envio/receção, digitalização, moedas, um feed de atividade e uma cache offline.&lt;/p>
&lt;h3 id="amethyst-estabiliza-o-nests-com-keep-alive-resiliência-jwt-e-subscrições-de-ciclo-de-vida">Amethyst estabiliza o Nests com keep-alive, resiliência JWT e subscrições de ciclo de vida&lt;/h3>
&lt;p>O Amethyst, o cliente Android rico em funcionalidades, continuou o trabalho nas salas de áudio NIP-53 Nests com um sprint de estabilização focado nos modos de falha que quebravam chamadas em produção. A correção de falhas de áudio na PR #2733 sobrepõe a nova aquisição de credenciais com o stream ativo durante a renovação JWT. Um novo mecanismo keep-alive na PR #2730 reconecta relays desligados sem necessitar de ação manual do utilizador, e a PR #2728 substitui o KeyDataSourceSubscription legado pelo LifecycleAwareKeyDataSourceSubscription. A PR #2724 adiciona um indicador de anel exterior animado que destaca o participante que está a falar em sessões com múltiplos oradores.&lt;/p>
&lt;h3 id="ngit-v242-e-v243-corrigem-deteção-de-servidores-grasp-e-eventos-de-estado-multi-remote">ngit v2.4.2 e v2.4.3 corrigem deteção de servidores GRASP e eventos de estado multi-remote&lt;/h3>
&lt;p>O ngit, a ferramenta de linha de comando e plugin git para colaboração NIP-34, lançou v2.4.2 a 28 de abril e v2.4.3 a 1 de maio. O v2.4.2 corrige uma discrepância de normalização de URL onde repo_grasps continha nomes de host normalizados mas a comparação era feita com URLs de clone completos. O v2.4.3 corrige uma ambiguidade de evento de estado que surgiu quando um repositório tem múltiplos remotes nostr:// com o mesmo identificador.&lt;/p>
&lt;h3 id="grain-v054-traz-reforço-de-produção-e-uma-correção-silenciosa-de-perda-de-dados">GRAIN v0.5.4 traz reforço de produção e uma correção silenciosa de perda de dados&lt;/h3>
&lt;p>O GRAIN, o relay Nostr e biblioteca de cliente baseados em Go, lançou v0.5.4 a 30 de abril. O lançamento consolida seis correções acumuladas desde v0.5.3, incluindo um bug silencioso de perda de dados no arranque rápido Docker que anteriormente descartava eventos quando o contentor reiniciava, e um bug de correção da camada de armazenamento nas leituras de eventos endereçáveis.&lt;/p>
&lt;h3 id="mostro-core-v0101-adiciona-artefactos-de-lançamento-assinados-com-pgp">Mostro Core v0.10.1 adiciona artefactos de lançamento assinados com PGP&lt;/h3>
&lt;p>O Mostro Core, a biblioteca Rust que fornece funcionalidade peer-to-peer para o daemon Mostro, lançou v0.10.1 a 28 de abril. O novo lançamento adiciona artefactos de lançamento assinados com PGP e um fluxo de verificação de lançamento para que os empacotadores downstream possam confirmar a proveniência dos artefactos.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="clave-v020-lança-multi-conta-no-ios-com-assinatura-nip-46-nostr-connect">Clave v0.2.0 lança multi-conta no iOS com assinatura NIP-46 (Nostr Connect)&lt;/h3>
&lt;p>O Clave, a app iOS de assinatura remota NIP-46, lançou v0.2.0 a 5 de maio. A maior atualização introduz suporte a múltiplas contas: o Clave pode agora ter até quatro contas num único dispositivo, com um seletor de um toque e isolamento por conta. A PR #23 adiciona a canalização iOS para multi-conta, e a PR #22 adiciona um campo signer_pubkey à carga APNs para que o dispositivo saiba a que conta pertence um pedido de assinatura remota.&lt;/p>
&lt;h3 id="wisp-lança-trabalho-de-estabilidade-v103--v105">Wisp lança trabalho de estabilidade v1.0.3 → v1.0.5&lt;/h3>
&lt;p>O Wisp, o cliente Android, lançou v1.0.3, v1.0.4 e v1.0.5 a 4 de maio com trabalho de estabilidade. A PR #506 adiciona Thumbhash para pré-visualizações de imagens desfocadas enquanto o media completo carrega, e a PR #514 reduz o engasgamento ao mudar de separadores inferiores.&lt;/p>
&lt;h3 id="amber-610-pre1-lança-correções-de-layout-e-estabilidade">Amber 6.1.0-pre1 lança correções de layout e estabilidade&lt;/h3>
&lt;p>O Amber, a app Android de assinatura para NIP-55 e NIP-46, lançou v6.1.0-pre1 com uma passagem de layout no fluxo de conexão de nova app e várias correções de falhas. A PR #416 corrige o layout do ActivityStatsBar e problemas de overflow de texto.&lt;/p>
&lt;h3 id="routstr-core-v043-melhora-pagamento-reembolso-e-relatórios-de-utilização">Routstr Core v0.4.3 melhora pagamento, reembolso e relatórios de utilização&lt;/h3>
&lt;p>O Routstr Core lançou v0.4.3 como pré-lançamento a 1 de maio com melhorias no tratamento de pagamentos e reembolsos, rastreamento de custos e relatórios de utilização.&lt;/p>
&lt;h3 id="nostria-v3137-a-v3141-adiciona-marcadores-web-e-um-tema-automático">Nostria v3.1.37 a v3.1.41 adiciona marcadores Web e um tema automático&lt;/h3>
&lt;p>O Nostria, o cliente Nostr multiplataforma, lançou v3.1.37 a v3.1.41 adicionando suporte a marcadores Web NIP-B0, um tema automático que segue as definições do dispositivo e visualização de PDF na app.&lt;/p>
&lt;h3 id="noornote-v089-corrige-ecrã-vazio-no-primeiro-lançamento-no-desktop">NoorNote v0.8.9 corrige ecrã vazio no primeiro lançamento no desktop&lt;/h3>
&lt;p>O NoorNote lançou v0.8.9 a 28 de abril corrigindo um bug de ecrã vazio no primeiro lançamento da app desktop.&lt;/p>
&lt;h3 id="kubo-v034-a-v041-lança-plataforma-de-vídeo-nostr-segura-para-crianças-com-controlos-parentais-e-curadoria-de-feed-web-of-trust">Kubo v0.3.4 a v0.4.1 lança plataforma de vídeo Nostr segura para crianças com controlos parentais e curadoria de feed Web of Trust&lt;/h3>
&lt;p>O Kubo, uma plataforma de vídeo segura para crianças no Nostr, lançou v0.3.4 a v0.4.1 nos dias 4 e 5 de maio. Cada criança recebe um par de chaves Nostr separado e um feed centrado em vídeo onde os pais controlam limites de tempo (15 a 180 minutos diários), janelas de tempo permitidas e visibilidade de ações de publicação.&lt;/p>
&lt;h2 id="mudanças-não-lançadas">Mudanças não lançadas&lt;/h2>
&lt;h3 id="sprout-lança-desktop-v004-e-v005-juntamente-com-autenticação-de-agente-nip-oa-e-o-sidecar-relay-de-emparelhamento">Sprout lança Desktop v0.0.4 e v0.0.5 juntamente com autenticação de agente NIP-OA e o sidecar relay de emparelhamento&lt;/h3>
&lt;p>O Sprout, o cliente Nostr da Block com relay integrado, lançou Desktop v0.0.4 a 5 de maio e v0.0.5 a 6 de maio. A PR #471 conecta a autenticação de agente NIP-OA ao fluxo de adesão NIP-43 do relay para que um agente autónomo possa provar que uma chave pública humana específica autorizou as suas ações. Um novo relay sidecar efémero para emparelhamento de dispositivos NIP-AB chega na PR #467 como sprout-pair-relay.&lt;/p>
&lt;h3 id="nostream-adiciona-suporte-a-relay-marmot-e-reações-nip-25">nostream adiciona suporte a relay Marmot e reações NIP-25&lt;/h3>
&lt;p>O nostream, a implementação de relay Node.js, fundiu suporte a relay do Marmot Protocol cobrindo MIPs 00 a 03 na PR #602, suporte a reações NIP-25 na PR #589 e correspondência de prefixo geohash para filtros #g na PR #586.&lt;/p>
&lt;h3 id="strfry-adiciona-observabilidade-por-conexão-e-reduz-o-teto-nofiles">strfry adiciona observabilidade por conexão e reduz o teto nofiles&lt;/h3>
&lt;p>O strfry, o relay Nostr em C++, fundiu 14 PRs direcionados à observabilidade. A PR #218 adiciona observabilidade de saída pendente por conexão e um limite de contrapressão configurável. A PR #224 remove alocações de heap std::function do fanout do monitor por evento.&lt;/p>
&lt;h3 id="damus-substitui-gifs-tenor-por-um-proxy-purple-e-lança-ux-de-compactação">Damus substitui GIFs Tenor por um proxy Purple e lança UX de compactação&lt;/h3>
&lt;p>O Damus fundiu a PR #3737 substituindo a integração de GIF Tenor por um proxy Damus Purple.&lt;/p>
&lt;h3 id="primal-android-melhora-explorar-alertas-e-o-emblema-verificado-nip-05">Primal Android melhora Explorar, alertas e o emblema verificado NIP-05&lt;/h3>
&lt;p>O Primal Android fundiu a PR #1043 corrigindo um emblema verificado NIP-05 que piscava para utilizadores com identificadores _@domínio.&lt;/p>
&lt;h3 id="alby-hub-adiciona-pagamentos-nwc-a-partir-de-conexões-de-apps">Alby Hub adiciona pagamentos NWC a partir de conexões de apps&lt;/h3>
&lt;p>O Alby Hub fundiu a PR #2267 permitindo pagamentos a partir de conexões de apps.&lt;/p>
&lt;h3 id="routstrd-auth-um-routstrd-dockerizado-para-equipas-com-autenticação-nip-98-e-rbac-npub">routstrd-auth: um Routstrd dockerizado para equipas com autenticação NIP-98 e RBAC npub&lt;/h3>
&lt;p>O routstrd-auth, criado a 27 de abril, é uma variante dockerizada do Routstrd para implementações de equipas multi-utilizador com controlo de acesso baseado em funções npub e autenticação HTTP NIP-98.&lt;/p>
&lt;h3 id="routstrd-integra-hermes-para-clientes-daemon-e-modo-remoto">Routstrd integra Hermes para clientes daemon e modo remoto&lt;/h3>
&lt;p>O Routstrd fundiu a PR #22 adicionando integração com o Hermes Agent para que o ficheiro de configuração do agente seja preenchido com fornecedores de modelos e chaves API que o Routstrd descobre via Nostr.&lt;/p>
&lt;h3 id="whitenoise-rs-lança-isolamento-de-base-de-dados-por-conta-e-atualizações-de-propostas">whitenoise-rs lança isolamento de base de dados por conta e atualizações de propostas&lt;/h3>
&lt;p>O whitenoise-rs fundiu a PR #796 movendo tabelas de projeção de mensagens para bases de dados por conta, e a PR #791 adiciona atualizações de propostas para que grupos possam estender funcionalidades com novos tipos de propostas.&lt;/p>
&lt;h3 id="angor-0221-lança-fluxos-de-app-compactos-juntamente-com-reforço-do-fornecedor-de-chaves-e-mudança-de-rede">Angor 0.2.21 lança fluxos de app compactos juntamente com reforço do fornecedor de chaves e mudança de rede&lt;/h3>
&lt;p>O Angor lançou 0.2.21 a 6 de maio com melhorias de desempenho de design móvel, fluxos de app compactos e um fornecedor de chaves seguro.&lt;/p>
&lt;h2 id="novos-projetos-rastreados-e-descobertos">Novos projetos rastreados e descobertos&lt;/h2>
&lt;h3 id="bitmacro-signer-um-bunker-nip-46-auto-hospedável-com-encriptação-de-chave-do-lado-do-cliente">BitMacro Signer: um bunker NIP-46 auto-hospedável com encriptação de chave do lado do cliente&lt;/h3>
&lt;p>O BitMacro Signer é uma ferramenta de assinatura Nostr auto-hospedável usando o modelo bunker NIP-46. As chaves são encriptadas no cliente antes do armazenamento para que o servidor nunca tenha o texto simples.&lt;/p>
&lt;p>A descoberta de repositórios NIP-34 revelou 26 novos anúncios de repositórios esta semana, dos quais quatro se destacam:&lt;/p>
&lt;h3 id="gnostr-uma-implementação-git-construída-diretamente-sobre-nostr">gnostr: uma implementação git construída diretamente sobre Nostr&lt;/h3>
&lt;p>O gnostr é uma implementação git construída diretamente sobre Nostr, com os seus próprios comandos de árvore de trabalho como um cliente de controlo de versão nativo do Nostr construído de raiz.&lt;/p>
&lt;h3 id="nostr-archive-uma-especificação-de-arquivo-com-endereçamento-por-conteúdo-no-nostr-e-blossom">nostr-archive: uma especificação de arquivo com endereçamento por conteúdo no Nostr e Blossom&lt;/h3>
&lt;p>O nostr-archive é uma especificação de rascunho e implementação de referência para arquivos com endereçamento por conteúdo no Nostr e Blossom.&lt;/p>
&lt;h3 id="flower-cache-um-servidor-de-cache-blossom-local">flower-cache: um servidor de cache Blossom local&lt;/h3>
&lt;p>O flower-cache é um servidor de cache Blossom local, útil para clientes que querem um espelho local quente do conjunto de blobs de um servidor Blossom remoto.&lt;/p>
&lt;h3 id="micro-vpn-ansible-playbooks-ansible-para-implementação-de-vpn-via-nip-34">micro-vpn-ansible: playbooks Ansible para implementação de VPN via NIP-34&lt;/h3>
&lt;p>O micro-vpn-ansible é uma pequena coleção de playbooks Ansible para implementar uma micro VPN, hospedada como repositório NIP-34.&lt;/p>
&lt;h2 id="trabalho-de-protocolo">Trabalho de protocolo&lt;/h2>
&lt;h3 id="atualizações-nip">Atualizações NIP&lt;/h3>
&lt;ul>
&lt;li>Um mercado de hashrate sem intermediário no Nostr (proposta de rascunho): Rascunho anónimo de NIP argumentando que os atuais participantes do mercado de hashrate são corretores de custódia que fazem KYC aos utilizadores. Propõe um mercado de hashrate P2P em eventos Nostr.&lt;/li>
&lt;li>Curated Feeds: uma alternativa mais simples aos feeds DVM (proposta de rascunho): Argumenta que os DVMs NIP-90 são demasiado pesados para curadoria simples de feeds; propõe eventos endereçáveis leves com listas ordenadas de IDs de eventos.&lt;/li>
&lt;li>Profile Colors: identidade visual determinística (proposta de rascunho): Novo rascunho NIP para derivar cores legíveis determinísticas de uma chave pública Nostr para identidade visual consistente entre clientes.&lt;/li>
&lt;li>NIPs Namecoin-Track: ancoragem de identidade, relays, TLS e reputação (cluster de rascunhos): Um conjunto de NIPs de rascunho movendo peças da pilha Nostr para registos ancorados no Namecoin.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-em-profundidade-nip-34-git-stuff">NIP em profundidade: NIP-34 (git stuff)&lt;/h2>
&lt;p>O NIP-34 define tipos de eventos para hospedar repositórios git, patches, pull requests, issues e estado de fusão em relays Nostr. Um repositório é anunciado como um evento endereçável de tipo 30617. Os patches usam o tipo 1617 transportando a saída git format-patch. As pull requests usam o tipo 1618. As issues usam o tipo 1621 com conteúdo markdown. Os eventos de estado movem uma thread entre Open (1630), Applied/Merged ou Resolved (1631), Closed (1632) e Draft (1633). A história NIP-34 desta semana é a mesma que o lançamento GitWorkshop v2 da semana passada: o botão de fusão de PR no browser funciona porque os servidores GRASP, o ngit e o esquema de URL clone nostr:// fecham juntos o ciclo numa forge totalmente descentralizada.&lt;/p>
&lt;h2 id="nip-em-profundidade-nip-53-live-activities">NIP em profundidade: NIP-53 (Live Activities)&lt;/h2>
&lt;p>O NIP-53 define a superfície de eventos padrão para atividades ao vivo no Nostr: transmissões ao vivo, espaços de reunião persistentes, eventos de conferência agendados, presença de ouvintes e chat ao vivo. Uma transmissão ao vivo é anunciada como um evento endereçável de tipo 30311. O NIP-53 separa a sala persistente do evento agendado realizado dentro dela: um Meeting Space de tipo 30312 define uma sala, e um Conference Event de tipo 30313 representa uma reunião agendada ou em curso nessa sala. A superfície de atividades ao vivo do Nostr é intencionalmente leve: o NIP-53 anuncia a atividade, enquanto outros NIPs tratam de preocupações adjacentes como zaps (NIP-57), objetivos de zap (NIP-75) e gravações de vídeo (NIP-71).&lt;/p>
&lt;hr>
&lt;p>Isso é tudo para esta semana. Se estiver a construir algo ou tiver notícias para partilhar, envie-nos uma DM no Nostr ou encontre-nos em nostrcompass.org.&lt;/p></content:encoded></item><item><title>Nostr Compass #20</title><link>https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#gitworkshop-lan%c3%a7a-merge-de-pr-no-navegador-seguimento-de-reposit%c3%b3rios-e-um-explorador-de-git-eficiente-em-largura-de-banda">GitWorkshop&lt;/a> transforma git-over-Nostr em uma superfície de revisão de código mais completa com um botão de merge de PR no navegador, Stars e seguimento de repositórios, um explorador de git eficiente em largura de banda, comentários de revisão inline kind &lt;code>1111&lt;/code> e estado de notificação criptografado multi-dispositivo. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#routstrd-lan%c3%a7a-um-roteador-local-para-infer%c3%aancia-sobre-nostr">Routstrd&lt;/a> lança um daemon local que descobre provedores de modelos através de anúncios Nostr kind &lt;code>38421&lt;/code> e os paga com Cashu. Releases com tag incluem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#ngit-v242-corrige-detec%c3%a7%c3%a3o-de-relay-grasp-para-submiss%c3%b5es-de-pr">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#wisp-v100-sai-do-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#grain-v052-corrige-travamento-de-websocket-v053-continua-a-polir">grain v0.5.2 e v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#mostro-core-v0100-e-mostro-mobile-v125-adotam-gift-wrap-de-chave-dupla-nip-59">Mostro Core v0.10.0 e Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#marmot-ts-v050-lan%c3%a7a-keypackages-endere%c3%a7%c3%a1veis">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#cruxcoach-v013-lan%c3%a7a-backup-criptografado-de-dados-de-escalada-com-nostr-e-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#meiso-v130-adiciona-subtarefas-anexos-blossom-e-tag-nip-89">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet e mais. Mudanças não lançadas cobrem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#amethyst-avan%c3%a7a-com-salas-de-%c3%a1udio-nests-com-testes-de-interoperabilidade-moq">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#nostream-adiciona-suporte-a-lista-de-relays-nip-65-e-pagamentos-nwc">nostream NIP-65 e NWC&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#fips-adiciona-bootstrap-udpnat-baseado-em-nostr">bootstrap udp:nat baseado em Nostr no FIPS&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#strfry-adiciona-observabilidade-por-conex%c3%a3o">observabilidade do strfry&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#sprout-adiciona-atestado-de-propriet%c3%a1rio-e-suporte-a-m%c3%baltiplos-workspaces">atestados de proprietário do Sprout&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#zap-cooking-adiciona-pacotes-de-receitas-solicita%c3%a7%c3%b5es-de-exclus%c3%a3o-e-login-bunker">pacotes de receitas do Zap Cooking&lt;/a>. Projetos recém-rastreados incluem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#nostrord-um-cliente-nip-29-constru%c3%addo-com-kotlin-multiplatform-e-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#clave-traz-assinatura-remota-nip-46-para-ios-via-apns">Clave&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#treasures-geocaching-descentralizado-no-nostr">Treasures&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#smesh-v051-relay-cliente-e-signer-nostr-auto-hospedados-em-uma-stack">smesh&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#surveil-um-construtor-de-decks-de-magic-the-gathering-no-nostr">Surveil&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#adi%c3%a7%c3%b5es-menores-fundstr-nod-city-deploy-nsite-to-pages-e-null-nostr">Fundstr, Nod City, deploy-nsite-to-pages e null&amp;ndash;nostr&lt;/a>. A retrospectiva de fim de mês cobre os Abris do Nostr de 2021 a 2026.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#gitworkshop-lan%c3%a7a-merge-de-pr-no-navegador-seguimento-de-reposit%c3%b3rios-e-um-explorador-de-git-eficiente-em-largura-de-banda">GitWorkshop&lt;/a> transforma git-over-Nostr em uma superfície de revisão de código mais completa com um botão de merge de PR no navegador, Stars e seguimento de repositórios, um explorador de git eficiente em largura de banda, comentários de revisão inline kind &lt;code>1111&lt;/code> e estado de notificação criptografado multi-dispositivo. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#routstrd-lan%c3%a7a-um-roteador-local-para-infer%c3%aancia-sobre-nostr">Routstrd&lt;/a> lança um daemon local que descobre provedores de modelos através de anúncios Nostr kind &lt;code>38421&lt;/code> e os paga com Cashu. Releases com tag incluem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#ngit-v242-corrige-detec%c3%a7%c3%a3o-de-relay-grasp-para-submiss%c3%b5es-de-pr">ngit v2.4.2&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#wisp-v100-sai-do-beta">Wisp v1.0.0&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#grain-v052-corrige-travamento-de-websocket-v053-continua-a-polir">grain v0.5.2 e v0.5.3&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#mostro-core-v0100-e-mostro-mobile-v125-adotam-gift-wrap-de-chave-dupla-nip-59">Mostro Core v0.10.0 e Mostro Mobile v1.2.5&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#marmot-ts-v050-lan%c3%a7a-keypackages-endere%c3%a7%c3%a1veis">marmot-ts v0.5.0&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#cruxcoach-v013-lan%c3%a7a-backup-criptografado-de-dados-de-escalada-com-nostr-e-blossom">CruxCoach v0.1.3&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#meiso-v130-adiciona-subtarefas-anexos-blossom-e-tag-nip-89">Meiso v1.3.0&lt;/a>, NoorNote, Nostria, Nostr Calendar, nos2x-fox, applesauce, nostr-double-ratchet e mais. Mudanças não lançadas cobrem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#amethyst-avan%c3%a7a-com-salas-de-%c3%a1udio-nests-com-testes-de-interoperabilidade-moq">Amethyst Nests&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#nostream-adiciona-suporte-a-lista-de-relays-nip-65-e-pagamentos-nwc">nostream NIP-65 e NWC&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#fips-adiciona-bootstrap-udpnat-baseado-em-nostr">bootstrap udp:nat baseado em Nostr no FIPS&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#strfry-adiciona-observabilidade-por-conex%c3%a3o">observabilidade do strfry&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#sprout-adiciona-atestado-de-propriet%c3%a1rio-e-suporte-a-m%c3%baltiplos-workspaces">atestados de proprietário do Sprout&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#zap-cooking-adiciona-pacotes-de-receitas-solicita%c3%a7%c3%b5es-de-exclus%c3%a3o-e-login-bunker">pacotes de receitas do Zap Cooking&lt;/a>. Projetos recém-rastreados incluem &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#nostrord-um-cliente-nip-29-constru%c3%addo-com-kotlin-multiplatform-e-wasm">Nostrord&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#clave-traz-assinatura-remota-nip-46-para-ios-via-apns">Clave&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#treasures-geocaching-descentralizado-no-nostr">Treasures&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#smesh-v051-relay-cliente-e-signer-nostr-auto-hospedados-em-uma-stack">smesh&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#surveil-um-construtor-de-decks-de-magic-the-gathering-no-nostr">Surveil&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#adi%c3%a7%c3%b5es-menores-fundstr-nod-city-deploy-nsite-to-pages-e-null-nostr">Fundstr, Nod City, deploy-nsite-to-pages e null&amp;ndash;nostr&lt;/a>. A retrospectiva de fim de mês cobre os Abris do Nostr de 2021 a 2026.&lt;/p>
&lt;h2 id="matérias-principais">Matérias principais&lt;/h2>
&lt;h3 id="gitworkshop-lança-merge-de-pr-no-navegador-seguimento-de-repositórios-e-um-explorador-de-git-eficiente-em-largura-de-banda">GitWorkshop lança merge de PR no navegador, seguimento de repositórios e um explorador de git eficiente em largura de banda&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev">GitWorkshop&lt;/a>, a camada de colaboração baseada na web de Dan Conway para &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> git-over-Nostr, lançou uma release importante esta semana que aproxima muito o fluxo de trabalho do que os desenvolvedores esperam do GitHub ou GitLab, mantendo comentários, listas de repositórios e notificações dentro de eventos Nostr assinados.&lt;/p>
&lt;p>A adição em destaque é um botão de merge de PR no navegador há muito aguardado para repositórios que usam relays GRASP. A release também adiciona Stars e seguimento de repositórios construídos sobre reações e listas &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>, com conjuntos de repositórios fixados publicados como eventos kind &lt;code>10617&lt;/code> que apontam para anúncios de repositório kind &lt;code>30617&lt;/code> através de tags &lt;code>a&lt;/code> ordenadas. Páginas de perfil agora podem apresentar uma lista portátil de repositórios.&lt;/p>
&lt;p>Um explorador de git eficiente em largura de banda substitui o shallow clone no navegador anterior. O novo explorador se apoia no protocolo cliente/servidor git subjacente sobre o qual o GRASP é construído, para que possa lidar com repositórios grandes sem forçar o navegador a buscar um pack completo. A busca agora cobre nomes de usuário e metadados de repositório, alimentada pelo &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> e uma implementação de relay &lt;code>ngit-indexer&lt;/code> que descobre e sincroniza anúncios de repositório pela rede. Um fluxo de criação de repositório no navegador completa o caminho de descoberta e onboarding.&lt;/p>
&lt;p>As ferramentas de revisão são reconstruídas em torno de uma aba Files Changed, um visualizador de diff por patch e um conjunto de novas primitivas experimentais. Comentários de revisão de código inline usam kind &lt;code>1111&lt;/code>, construído sobre o &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">NIP-22&lt;/a>: cada comentário aponta para um caminho de arquivo (tag &lt;code>f&lt;/code>), um SHA de commit (tag &lt;code>c&lt;/code>) e um intervalo de linhas selecionado (tag &lt;code>line&lt;/code>) para que um cliente possa renderizar o comentário na posição correta em um diff. Um segundo nível de primitivas experimentais é permissionado por autor e mantenedores de repositório e usa labels &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a>: renomear o assunto de uma Issue ou PR após a submissão, adicionar hashtags após a submissão, fixar uma CoverNote versionada no topo de um PR ou Issue para um resumo editável e marcar subthreads de discussão de código inline como resolvidos. Eventos de veredito e blocos &lt;code>suggestion&lt;/code> permanecem como rascunho e ainda não foram lançados.&lt;/p>
&lt;p>O estado de notificação entre dispositivos também é sincronizado através do Nostr, mas com uma reviravolta de preservação de privacidade. O GitWorkshop gera um par de chaves dedicado a notificações, criptografa esse nsec e o armazena dentro de um evento kind &lt;code>30078&lt;/code>. O nsec de notificações então assina os eventos reais de estado de notificação. A indireção evita que o signer principal do usuário seja bombardeado com requisições frequentes de criptografia e descriptografia para cada ação de leitura ou arquivamento, e impede que observadores externos vejam facilmente quando um usuário toca em seu estado de notificação. Um usuário pode sincronizar o estado de leitura e arquivamento entre dispositivos; os relays só veem blobs criptografados.&lt;/p>
&lt;h3 id="routstrd-lança-um-roteador-local-para-inferência-sobre-nostr">Routstrd lança um roteador local para inferência sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a> é um novo daemon TypeScript que dá às ferramentas locais um endpoint compatível com OpenAI e roteia cada requisição para um provedor &lt;a href="https://routstr.com">Routstr&lt;/a> concorrente. O daemon descobre provedores através de anúncios Nostr kind &lt;code>38421&lt;/code> definidos na especificação RIP-02 do Routstr. Ele então pontua provedores por preço, confiança e desempenho recente sob RIP-06 e envia cada requisição para a melhor opção atual.&lt;/p>
&lt;p>O pagamento é feito através de uma carteira Cashu local gerenciada pelo cocod e financiada com Lightning. Isso dá ao cliente um caminho de liquidação denominado em sats, mantendo a descoberta de provedores pública e sem permissão através de relays Nostr. Se um provedor falhar durante uma sessão, o Routstrd pode recorrer ao próximo nó classificado. O caminho de instalação é &lt;code>bun install -g routstrd&lt;/code>, seguido por &lt;code>routstrd onboard&lt;/code> para configuração de carteira e relay.&lt;/p>
&lt;p>A &lt;a href="https://github.com/routstr">organização Routstr&lt;/a> mais ampla mantém o daemon, o software de nó Python (&lt;code>routstr-core&lt;/code>), uma UI de chat e especificações de protocolo. Para os usuários, a porta local se torna a interface estável: ferramentas existentes compatíveis com OpenAI apontam para o Routstrd, enquanto o daemon lida com descoberta de provedores, roteamento e pagamento.&lt;/p>
&lt;h2 id="releases-com-tag">Releases com tag&lt;/h2>
&lt;h3 id="ngit-v242-corrige-detecção-de-relay-grasp-para-submissões-de-pr">ngit v2.4.2 corrige detecção de relay GRASP para submissões de PR&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/DanConwayDev/ngit-cli">ngit&lt;/a> lançou &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a> com uma correção para detecção de servidor GRASP do repositório, mantendo a submissão de PR no caminho feliz quando uma proposta usa o kind PR. Note que o ngit atualmente usa por padrão o kind &lt;code>Patch&lt;/code> para a maioria das mudanças, a menos que sejam grandes; o mantenedor está trabalhando para mudar o padrão. &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.1">v2.4.1&lt;/a>, lançada mais cedo na semana, corrigiu erros &lt;code>fatal&lt;/code> durante clone e fetch quando os dados git de um PR aberto não estavam disponíveis nos servidores git especificados do repositório.&lt;/p>
&lt;h3 id="wisp-v100-sai-do-beta">Wisp v1.0.0 sai do beta&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, um cliente Android em Kotlin e Jetpack Compose focado em roteamento de relay, privacidade e uma pequena UI nativa, lançou &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.0">v1.0.0&lt;/a> e o seguiu com &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.2">v1.0.2&lt;/a>. O marco 1.0.0 reúne o toggle de denominação em fiat Normie Mode, o feed For You, configuração de grupo baseada em relay &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> e transmissão de lista de relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> cobertos no &lt;a href="https://nostrcompass.org/pt/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 adiciona suporte a tamanho de página de 16 KB do Android 15, uma aba de escaneamento de QR na drawer sheet, um botão de download para controles de vídeo inline e correções de desempenho da lista de notificações.&lt;/p>
&lt;h3 id="grain-v052-corrige-travamento-de-websocket-v053-continua-a-polir">grain v0.5.2 corrige travamento de WebSocket, v0.5.3 continua a polir&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a>, o relay Go do 0ceanSlim, lançou &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.2">v0.5.2&lt;/a> como um hotfix crítico para um travamento de WebSocket introduzido em v0.5.0, e o seguiu com &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.3">v0.5.3&lt;/a>. O travamento fazia conexões pendurarem sob alguns caminhos de filtro e WebSocket, então operadores em v0.5.1 ou v0.5.0 devem atualizar. O grain rastreia todas as principais categorias de eventos Nostr, expõe informações de relay NIP-11, suporta controle de acesso whitelist/blacklist, limites de taxa por kind, um painel web e uma biblioteca cliente Go adicionada na linha v0.5.x.&lt;/p>
&lt;h3 id="mostro-core-v0100-e-mostro-mobile-v125-adotam-gift-wrap-de-chave-dupla-nip-59">Mostro Core v0.10.0 e Mostro Mobile v1.2.5 adotam gift wrap de chave dupla NIP-59&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> adiciona o novo módulo gift-wrap &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> com chaves de identidade e trade separadas. Código de transporte anterior usava uma única chave de identidade tanto para identidade de trade quanto para gift wrapping. v0.10.0 separa a identidade de trade estável da chave de wrapping efêmera, então cada trade pode usar uma nova chave de transporte enquanto preserva a identidade necessária para o protocolo de trade. A integração com o daemon chega através do &lt;a href="https://github.com/MostroP2P/mostro/pull/718">Mostro PR #718&lt;/a>, e o &lt;a href="https://github.com/MostroP2P/mostro-cli/pull/165">mostro-cli PR #165&lt;/a> traz a mesma migração para o cliente de linha de comando.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.5">Mostro Mobile v1.2.5&lt;/a> sai junto com o trabalho de protocolo. &lt;a href="https://github.com/MostroP2P/mobile/pull/581">PR #581&lt;/a> permite que takers filtrem ofertas pela idade da conta do maker, dando aos usuários uma maneira de evitar contas maker recém-criadas no order book. &lt;a href="https://github.com/MostroP2P/mobile/pull/580">PR #580&lt;/a> corrige labels de papel em detalhes de ordens canceladas, e &lt;a href="https://github.com/MostroP2P/mobile/pull/576">PR #576&lt;/a> limpa botões de cancelamento cooperativo.&lt;/p>
&lt;h3 id="marmot-ts-v050-lança-keypackages-endereçáveis">marmot-ts v0.5.0 lança KeyPackages endereçáveis&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a> lançou &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>, a primeira release com quebra planejada para o cliente TypeScript do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/68">PR #68&lt;/a> adiciona suporte a KeyPackage endereçáveis: &lt;code>KeyPackageManager&lt;/code> agora pode lidar tanto com eventos KeyPackage legacy kind &lt;code>443&lt;/code> quanto com os novos kind &lt;code>30443&lt;/code>. A release remove &lt;code>KeyPackageStore&lt;/code> e as classes de armazenamento de estado de grupo, substituindo-as por armazenamentos genéricos de chave-valor passados para &lt;code>KeyPackageManager&lt;/code> e &lt;code>MarmotGroup&lt;/code>. Também move o gerenciamento de convites e grupos para &lt;code>MarmotClient.invites&lt;/code> e &lt;code>MarmotClient.groups&lt;/code>, então embedders diretos precisam de mudanças de construtor e armazenamento antes de atualizar.&lt;/p>
&lt;h3 id="cruxcoach-v013-lança-backup-criptografado-de-dados-de-escalada-com-nostr-e-blossom">CruxCoach v0.1.3 lança backup criptografado de dados de escalada com Nostr e Blossom&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/CruxCoach/CruxCoach">CruxCoach&lt;/a> é um novo app Android open-source para escaladores de Kilter Board. A Kilter Board é uma parede de treinamento interativa cujos holds acendem via Bluetooth para exibir rotas. O app foi lançado em 14 de abril e chegou à &lt;a href="https://codeberg.org/CruxCoach/CruxCoach/releases/tag/v0.1.3">v0.1.3&lt;/a> em 26 de abril.&lt;/p>
&lt;p>v0.1.3 adiciona backup em nuvem criptografado opcional. A conta CruxCoach de um usuário é um par de chaves Nostr, e a chave privada dobra como entrada para a chave de criptografia de backup local. O app criptografa dados de escalada no dispositivo e espelha o ciphertext para servidores de armazenamento Blossom (&lt;code>blossom.primal.net&lt;/code> e &lt;code>nostr.download&lt;/code>). Ações de exclusão remota chamam o caminho de limpeza Blossom. Além do backup, o CruxCoach usa assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> para suporte a Amber, DMs privadas &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> para contato in-app com o desenvolvedor, listas de relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> para descoberta de relays e a biblioteca &lt;a href="https://github.com/vitorpamplona/quartz">Quartz&lt;/a> de Vitor Pamplona para infraestrutura Nostr. Os usuários podem instalá-lo através do Zapstore ou APKs diretos do Codeberg.&lt;/p>
&lt;h3 id="meiso-v130-adiciona-subtarefas-anexos-blossom-e-tag-nip-89">Meiso v1.3.0 adiciona subtarefas, anexos Blossom e tag NIP-89&lt;/h3>
&lt;p>&lt;a href="https://github.com/higedamc/meiso">Meiso&lt;/a> é um gerenciador de tarefas Flutter minimalista para Android que armazena tarefas como dados de aplicação kind &lt;code>30078&lt;/code> criptografados &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> em relays Nostr. &lt;a href="https://github.com/higedamc/meiso/releases/tag/v1.3.0">v1.3.0&lt;/a>, lançada em 6 de abril, adiciona subtarefas com relacionamentos pai/filho, links de tarefas para blocks/blocked-by/related-to/duplicate-of, anexos de imagem através do Blossom e endpoints de upload de arquivo HTTP &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a>, uma tag &lt;code>client&lt;/code> de aplicação recomendada &lt;a href="https://github.com/nostr-protocol/nips/blob/master/89.md">NIP-89&lt;/a> em eventos publicados e uma ferramenta de sincronização de linha de comando em Go. v1.3.0 também corrige comportamento de relay em cold-start e reutilização de cliente Amber.&lt;/p>
&lt;h3 id="noornote-nostria-nostr-calendar-nos2x-fox-e-releases-de-bibliotecas">NoorNote, Nostria, Nostr Calendar, nos2x-fox e releases de bibliotecas&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> publicou &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> e &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.9">v0.8.9&lt;/a>. Essas releases corrigem o tratamento de cliques em imagens e vídeos em reposts citados, adicionam suporte a lightbox para imagens de artigos long-form e corrigem a tela de inicialização em branco no desktop. &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> lançou &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> e &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.31">v3.1.31&lt;/a>, adicionando compressão de imagens no editor de artigos, um toggle USD para carteira, controles de card promocional, suporte a PDF e polimento de layout mobile.&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 a publicação de eventos de calendário do gerenciamento de listas de calendários e corrige o rastreamento de convites. &lt;a href="https://github.com/diegogurpegui/nos2x-fox/releases/tag/v1.19.0">nos2x-fox v1.19.0&lt;/a> adiciona prazos de autorização personalizados para grants de assinatura no navegador NIP-07 no Firefox. &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.97">nostr-double-ratchet v0.0.97&lt;/a> lança novos binários. &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 padrão, e &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/535">nostr-tools PR #535&lt;/a> adiciona suporte a parsing multi-relay para strings de wallet-connect NIP-47.&lt;/p>
&lt;p>No final da semana, &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre1">Amber v6.1.0-pre1&lt;/a> lançou um pre-release com um melhor layout de conexão a novos apps, correções no diálogo do signer, tratamento aprimorado de permissões de notificação e seleção de conta refatorada. &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.14">nostr-vpn v0.3.14&lt;/a> lançou uma nova build com artefatos para macOS Apple Silicon, Linux e Windows. &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.8">Bitcredit Core v0.5.7-hotfix-1 e v0.5.8&lt;/a> lançaram correções consecutivas para um problema de validação de bloco órfão. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">Surveil v0.1.6&lt;/a> trouxe polimento de UI mobile e uma página About reformulada; o projeto em si é apresentado &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-29-newsletter/#surveil-um-construtor-de-decks-de-magic-the-gathering-no-nostr">abaixo&lt;/a>.&lt;/p>
&lt;h3 id="applesauce-600-remove-factories-de-eventos-legacy-e-adiciona-parsing-de-uri-blossom">applesauce 6.0.0 remove factories de eventos legacy e adiciona parsing de URI Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">applesauce&lt;/a>, o toolkit Nostr TypeScript do hzrd149, lançou um trem de releases 6.0.0 em todo o monorepo. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.0.0">applesauce-core@6.0.0&lt;/a> remove a classe legacy &lt;code>EventFactory&lt;/code> e os antigos helpers &lt;code>buildEvent&lt;/code>, &lt;code>modifyEvent&lt;/code> e &lt;code>createEvent&lt;/code>, empurrando os chamadores para as novas classes factory em &lt;code>applesauce-core/factories&lt;/code> e &lt;code>applesauce-common&lt;/code>. Também adiciona tratamento de endereços IP e localhost ao parsing de links, expressões regulares de URI Blossom BUD-10 e novos helpers observáveis como &lt;code>timeoutWithIgnore&lt;/code>, &lt;code>combineLatestBy&lt;/code>, &lt;code>combineLatestByIndex&lt;/code> e &lt;code>combineLatestByKey&lt;/code>.&lt;/p>
&lt;p>Releases em nível de pacote completam as peças específicas do Nostr. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-content%406.0.0">applesauce-content@6.0.0&lt;/a> adiciona nós de URI Blossom BUD-10 para texto e Markdown, dando aos renderizadores uma forma nativa de fazer parsing de referências Blossom em conteúdo. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.0.0">applesauce-actions@6.0.0&lt;/a> adiciona classes factory base para listas NIP-51 cobrindo relays, usuários e itens, tornando a construção 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> expõe &lt;code>WalletConnect.connectURI&lt;/code>, para que os apps possam acessar diretamente uma URI wallet-connect NIP-47 existente.&lt;/p>
&lt;h2 id="mudanças-não-lançadas">Mudanças não lançadas&lt;/h2>
&lt;h3 id="amethyst-avança-com-salas-de-áudio-nests-com-testes-de-interoperabilidade-moq">Amethyst avança com salas de áudio Nests com testes de interoperabilidade MoQ&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> fez merge de vários PRs focados em Nests esta semana, construindo sobre a stack de sala de áudio &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> da semana passada. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2622">PR #2622&lt;/a> adiciona um harness de interoperabilidade cross-client que exercita o cliente MoQ do Amethyst contra a implementação web de referência. O objetivo é capturar divergências no nível do fio entre Android/navegador antes que os usuários as encontrem. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2625">PR #2625&lt;/a> melhora o foco do falante em picture-in-picture e o status da conexão, enquanto &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2620">PR #2620&lt;/a> esclarece avatares, estado de mudo e estado de fala na grade de participantes. No final da semana, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2634">PR #2634&lt;/a> corrige padding de IME e window insets na visão full-screen de Nest e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2635">PR #2635&lt;/a> adiciona filtragem de frescor baseada em presença ao feed Nests. Separadamente, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2627">PR #2627&lt;/a> remove a implementação C personalizada de secp256k1 do Amethyst e migra para &lt;code>libschnorr256k1&lt;/code>.&lt;/p>
&lt;h3 id="nostream-adiciona-suporte-a-lista-de-relays-nip-65-e-pagamentos-nwc">nostream adiciona suporte a lista de relays NIP-65 e pagamentos NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> fez merge de três PRs notáveis após o sprint de 53 PRs de relay da semana passada. Suporte a metadados de lista de relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> chega no &lt;a href="https://github.com/Cameri/nostream/pull/585">PR #585&lt;/a>, para que o relay possa indexar e servir eventos de lista de relays kind &lt;code>10002&lt;/code>. Um processador de pagamentos Nostr Wallet Connect segue no &lt;a href="https://github.com/Cameri/nostream/pull/539">PR #539&lt;/a>, adicionando um caminho pay-to-relay. A limpeza de conexão melhora no &lt;a href="https://github.com/Cameri/nostream/pull/438">PR #438&lt;/a>, que fecha um bug de conexão morta onde sockets com subscriptions ativas não estavam sendo colhidos, causando drift nos contadores de subscription em instâncias de longa duração.&lt;/p>
&lt;h3 id="fips-adiciona-bootstrap-udpnat-baseado-em-nostr">FIPS adiciona bootstrap udp:nat baseado em Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>, o Free Internetworking Peering System previamente coberto em &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>, fez merge do &lt;a href="https://github.com/jmcorgan/fips/pull/53">PR #53&lt;/a> com bootstrap &lt;code>udp:nat&lt;/code> baseado em Nostr. A mudança permite que nós publiquem anúncios Nostr, troquem sinalização criptografada de offer/answer, descubram endereços públicos através de STUN, executem UDP hole punching e passem o socket perfurado para a stack de transporte FIPS normal. A implementação vincula identidades de payload de sinal ao remetente Nostr real, consulta relays DM e advert configurados para lookup de inbox e faz rollback de handoffs de travessia adotados que falharam, para que transportes UDP órfãos não permaneçam ativos. Este é o trabalho de anúncio Nostr e travessia NAT a rastrear no repositório canônico, &lt;code>jmcorgan/fips&lt;/code>.&lt;/p>
&lt;h3 id="strfry-adiciona-observabilidade-por-conexão">strfry adiciona observabilidade por conexão&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> fez merge do &lt;a href="https://github.com/hoytech/strfry/pull/214">PR #214&lt;/a>, adicionando observabilidade por conexão e métricas em nível de conexão exportáveis através do Prometheus. &lt;a href="https://github.com/hoytech/strfry/pull/204">PR #204&lt;/a> normaliza labels do Prometheus, e &lt;a href="https://github.com/hoytech/strfry/pull/215">PR #215&lt;/a> adiciona uma seção Community Integrations à documentação cobrindo projetos de identidade Namecoin construídos sobre o strfry.&lt;/p>
&lt;h3 id="sprout-adiciona-owner-attestation-e-suporte-a-múltiplos-workspaces">Sprout adiciona Owner Attestation e suporte a múltiplos workspaces&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, o cliente Nostr do Block, fez merge do &lt;a href="https://github.com/block/sprout/pull/406">PR #406&lt;/a> implementando NIP-OA (Owner Attestation). O recurso dá a um agente autônomo uma prova criptográfica de que uma pubkey humana específica autorizou suas ações. &lt;a href="https://github.com/block/sprout/pull/409">PR #409&lt;/a> adiciona suporte a múltiplos workspaces ao app desktop, &lt;a href="https://github.com/block/sprout/pull/411">PR #411&lt;/a> adiciona autocompletar &lt;code>#channel&lt;/code> ao compose mobile, e &lt;a href="https://github.com/block/sprout/pull/410">PR #410&lt;/a> fecha uma janela de race que podia derrubar mensagens ativas de canal. &lt;a href="https://github.com/block/sprout/pull/413">PR #413&lt;/a> introduz NIP-RS para sincronização de estado de leitura entre dispositivos, e os follow-ups &lt;a href="https://github.com/block/sprout/pull/420">PR #420&lt;/a> e &lt;a href="https://github.com/block/sprout/pull/422">PR #422&lt;/a> conectam esse estado de leitura aos badges de não lidos mobile.&lt;/p>
&lt;h3 id="zap-cooking-adiciona-pacotes-de-receitas-solicitações-de-exclusão-e-login-bunker">Zap Cooking adiciona pacotes de receitas, solicitações de exclusão e login bunker&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> fez merge de uma semana produtiva de trabalho de publicação de receitas. Solicitações de exclusão &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> para os Pacotes de Receitas do próprio usuário chegam no &lt;a href="https://github.com/zapcooking/frontend/pull/367">PR #367&lt;/a>. A confiabilidade de publicação melhora através do &lt;a href="https://github.com/zapcooking/frontend/pull/366">PR #366&lt;/a>, que força cada nova receita para o relay garden e adiciona uma fila de retry para o conjunto compartilhado de receitas. Publicação de pacote autoral com um clique chega no &lt;a href="https://github.com/zapcooking/frontend/pull/365">PR #365&lt;/a>, e &lt;a href="https://github.com/zapcooking/frontend/pull/331">PR #331&lt;/a> adiciona suporte a login bunker &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>.&lt;/p>
&lt;h3 id="whitenoise-rs-criptografa-seu-banco-de-dados-local">Whitenoise-rs criptografa seu banco de dados local&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> fez merge do &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/758">PR #758&lt;/a>, adicionando criptografia SQLCipher para o banco de dados Whitenoise em disco. Isso fecha uma lacuna de segurança em repouso de longa data para a stack daemon do Marmot. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/775">PR #775&lt;/a> expõe capacidades requeridas de grupo, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/772">PR #772&lt;/a> migra operações de mídia de grupo para &lt;code>MediaOps&lt;/code> de propriedade da sessão, e &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/773">PR #773&lt;/a> extrai um holder &lt;code>SharedServices&lt;/code> como parte do refactor de session-ops. No lado mobile, &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/577">whitenoise PR #577&lt;/a> ativa o auto-restart de boot para o serviço em primeiro plano do Android, corrigindo o caso onde o daemon não voltava após uma reinicialização do dispositivo.&lt;/p>
&lt;h2 id="recém-rastreado-e-descoberto">Recém-rastreado e descoberto&lt;/h2>
&lt;h3 id="nostrord-um-cliente-nip-29-construído-com-kotlin-multiplatform-e-wasm">Nostrord: um cliente NIP-29 construído com Kotlin Multiplatform e WASM&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> é um novo cliente de chat em grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> que visa o caso de uso de substituição do Discord. Grupos vivem em relays Nostr com membership, papéis, moderação e controle de acesso aplicados pelo relay, então o estado do grupo é hospedado pelo relay NIP-29 selecionado. O desenvolvedor do cliente não controla um banco de dados de aplicação separado para esses grupos. O app web roda em &lt;a href="https://web.nostrord.com">web.nostrord.com&lt;/a> e é construído com Kotlin Multiplatform compilando para WebAssembly, com builds nativos para Android, iOS e desktop em desenvolvimento. Nostrord é um recipiente de grant &lt;a href="https://opensats.org">OpenSats&lt;/a> e interopera com os mesmos relays NIP-29 usados por Flotilla, Chachi e 0xChat.&lt;/p>
&lt;h3 id="clave-traz-assinatura-remota-nip-46-para-ios-via-apns">Clave traz assinatura remota NIP-46 para iOS via APNs&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a> é um signer remoto iOS em beta que assina eventos Nostr quando o app não está aberto. A chave privada permanece no Keychain do iPhone. Quando um cliente envia uma requisição de assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, um proxy do lado do servidor entrega uma Apple Push Notification, acordando uma Notification Service Extension por até 30 segundos. Essa extensão descriptografa a requisição com criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, assina com a chave do Keychain e publica a resposta. O registro de token de dispositivo usa HTTP Auth &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> para evitar sequestro de token. Clave suporta pareamento &lt;code>bunker://&lt;/code> e &lt;code>nostrconnect://&lt;/code>, níveis de confiança por cliente, overrides por kind, e foi testado com Nostur e noStrudel.&lt;/p>
&lt;h3 id="treasures-geocaching-descentralizado-no-nostr">Treasures: geocaching descentralizado no Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/treasures">Treasures&lt;/a> é uma plataforma de geocaching onde caches e achados são eventos Nostr assinados. Criadores de cache publicam eventos endereçáveis kind &lt;code>37516&lt;/code> com coordenadas GPS. Descobridores registram a descoberta escaneando um QR code anexado ao cache físico; o código codifica a pubkey do criador, a tag &lt;code>d&lt;/code> do cache e uma chave privada de verificação usada como prova da visita física. Zaps &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> podem fluir de descobridores para criadores de cache, e o app ao vivo está em &lt;a href="https://treasures.to">treasures.to&lt;/a>.&lt;/p>
&lt;h3 id="smesh-v051-relay-cliente-e-signer-nostr-auto-hospedados-em-uma-stack">smesh v0.5.1: relay, cliente e signer Nostr auto-hospedados em uma stack&lt;/h3>
&lt;p>&lt;a href="https://git.smesh.lol/smesh/smesh">smesh&lt;/a> é uma stack Nostr auto-hospedada escrita em Moxie, uma linguagem personalizada derivada de Go e TinyGo pelo mleku. A stack entrega um binário nativo de relay com suporte a HTTP, WebSocket, AUTH, busca e Blossom; &lt;code>sm3sh&lt;/code>, um cliente web compilado para módulos ES; e uma extensão de signer no navegador com assinatura NIP-07 no navegador mais suporte a criptografia NIP-04 e NIP-44. Trabalho recente inclui mensageria de grupo MLS (RFC 9420) em v0.5.0, reconciliação de conjunto negentropy para sincronização de relay e um motor de grafo Web of Trust. O código vive na forge auto-hospedada do mleku em &lt;code>git.smesh.lol&lt;/code>, construída com sua própria ferramenta &lt;code>git-web&lt;/code>. O repositório relacionado &lt;a href="https://git.smesh.lol/smesh/gitea-nostr-auth">gitea-nostr-auth&lt;/a> é uma ponte OAuth2/OIDC para o Gitea: usuários autenticam com um signer NIP-07 no navegador, a ponte descobre relays através de NIP-65, e o Gitea recebe claims de identidade OIDC padrão.&lt;/p>
&lt;h3 id="surveil-um-construtor-de-decks-de-magic-the-gathering-no-nostr">Surveil: um construtor de decks de Magic: The Gathering no Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/surveil">Surveil&lt;/a> é um cliente Nostr para jogadores de Magic: The Gathering que permite aos usuários buscar cartas, construir decks, escanear cartas físicas no Android com OCR ML Kit no dispositivo e compartilhar decks pela rede. Decks são publicados como eventos endereçáveis kind &lt;code>37381&lt;/code>, e a especificação de evento de deck está documentada no &lt;code>NIP.md&lt;/code> do projeto. A camada social é construída a partir de primitivas Nostr padrão: comentários em thread NIP-22 (kind &lt;code>1111&lt;/code>) escopados a cada deck, reações NIP-25 (kind &lt;code>7&lt;/code>), dados 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 lares de jogadores, feeds de follows kind &lt;code>3&lt;/code> e forks que carregam uma tag &lt;code>a&lt;/code> de volta para o deck original. &lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">v0.1.6&lt;/a> foi lançada esta semana com polimento de UI mobile, melhorias no contador de vida, uma página About reformulada e uma pill de relay no banner hero do deck. O app web roda em qualquer lugar onde HTML estático seja servido, o build Android é entregue através do &lt;a href="https://zapstore.dev">Zapstore&lt;/a>, e eventos kind &lt;code>37381&lt;/code> também são indexados nativamente pelo &lt;a href="https://about.ditto.pub/reference">Ditto&lt;/a> como decks de Magic. O repositório está no GitLab em &lt;a href="https://gitlab.com/chad.curtis/surveil">chad.curtis/surveil&lt;/a>.&lt;/p>
&lt;h3 id="adições-menores-fundstr-nod-city-deploy-nsite-to-pages-e-null--nostr">Adições menores: Fundstr, Nod City, deploy-nsite-to-pages e null&amp;ndash;nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ritty65/Fundstr">Fundstr&lt;/a> é uma plataforma de financiamento de criadores no Nostr usando ecash Cashu para promessas únicas e recorrentes, com definições de nível de criador e DMs Nostr. &lt;a href="https://nod.city">Nod City&lt;/a> é um site de avaliações de serviços Bitcoin onde as avaliações são eventos Nostr assinados e os revisores podem receber zaps; nenhum repositório de código público foi encontrado. &lt;a href="https://github.com/Origami74/deploy-nsite-to-pages">deploy-nsite-to-pages&lt;/a> é uma GitHub Action que espelha um nsite para o GitHub Pages usando &lt;code>nsyte download&lt;/code>, suportando nsites kind &lt;code>15128&lt;/code> raiz e kind &lt;code>35128&lt;/code> nomeado. &lt;a href="https://github.com/tami1A84/null--nostr">null&amp;ndash;nostr&lt;/a>, também descoberto nos dados NIP-34 desta semana, é o cliente coberto na recente onda OpenSats como Nurunuru; suporta mensageria de grupo MLS, Amber, busca NIP-50, posts protegidos NIP-70, badges ProofMode e distribuição via Zapstore.&lt;/p>
&lt;p>FIPS não é um projeto novo para o Compass. Foi coberto em &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a>. O banco de dados agora aponta para o repositório canônico correto, &lt;a href="https://github.com/jmcorgan/fips">jmcorgan/fips&lt;/a>, e a descoberta NIP-34 desta semana também trouxe à tona mirrors git-over-Nostr relacionados como &lt;code>fips&lt;/code> e &lt;code>awesome-fips&lt;/code>.&lt;/p>
&lt;h2 id="trabalho-de-protocolo">Trabalho de protocolo&lt;/h2>
&lt;h3 id="atualizações-de-nip">Atualizações de NIP&lt;/h3>
&lt;p>Propostas recentes e discussões no &lt;a href="https://github.com/nostr-protocol/nips">repositório NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Merged esta semana:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-34 repositórios git: remover extensão de tag refs não usada&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a>): Remove uma extensão de tag &lt;code>refs&lt;/code> do &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> que foi definida mas não utilizada. A limpeza reduz a ambiguidade de implementação para ferramentas git-over-Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-34 repositórios git: remover afirmação incorreta sobre NIP-09&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>): Remove uma afirmação incorreta de que eventos de exclusão &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> podem resetar o estado do repositório. A exclusão NIP-09 é uma solicitação de exclusão de evento do lado do cliente, não uma máquina de estado de repositório. A correção evita que implementadores de NIP-34 tratem dicas de exclusão como resets autoritativos de repositório.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Trabalho aberto e conduzido por implementação:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Comentários de revisão de código inline kind &lt;code>1111&lt;/code> do GitWorkshop&lt;/strong>: O kind de comentário de revisão de código inline está documentado no &lt;code>NIP.md&lt;/code> do GitWorkshop e está agora em uso ativo, mas ainda não foi proposto como um NIP formal. Eventos de veredito (kind &lt;code>7321&lt;/code>) e blocos &lt;code>suggestion&lt;/code> permanecem como rascunho e ainda não foram lançados. Feedback de implementação do GitWorkshop e ngit determinará se as formas se tornam um NIP independente de git-review ou permanecem como uma convenção de aplicação em camadas sobre NIP-34.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Nostr mail core e Nostrmon&lt;/strong>: Dois novos rascunhos de NIP personalizados circularam esta semana. &lt;a href="https://njump.me/57d11cdf2f9ed73f7f39d6a7a6012ee3d642584ab11887f96a031f7d00fd9697">Nostr mail core&lt;/a> propõe kind &lt;code>1301&lt;/code> para conteúdo de email RFC 2822, embrulhado com NIP-59 para entrega privada e conectado a email legacy através de pubkeys de ponte resolvidas por NIP-05. &lt;a href="https://njump.me/5e9a8cee19d464f5f0322518ac9ccaf2399c69da6572346b4fb12d36acb17a27">Nostrmon&lt;/a> esboça kinds de eventos endereçáveis para regiões, mapas, criaturas, NPCs, saves de jogadores e itens. Ambos permanecem como rascunhos personalizados, não NIPs merged.&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>): A proposta continua a iterar sobre a adição de um marcador positivo de completude ao &lt;code>EOSE&lt;/code>, permitindo que relays distingam &amp;ldquo;eventos armazenados totalmente entregues&amp;rdquo; de casos &lt;code>EOSE&lt;/code> legacy onde o relay não faz nenhuma afirmação de completude.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="seis-abris-do-nostr">Seis abris do Nostr&lt;/h2>
&lt;p>Abril dá uma seção transversal limpa do caminho de desenvolvimento do Nostr: o documento de protocolo em 2021, trabalho inicial de clientes em 2022, a onda de aplicações pós-Damus em 2023, mensageria privada e trabalho git-over-Nostr em 2024, Blossom e limpeza de lista de relays em 2025, e grants de cliente focados em adoção em 2026.&lt;/p>
&lt;h3 id="abril-de-2021-o-documento-do-protocolo-antes-do-repositório-nips">Abril de 2021: o documento do protocolo antes do repositório NIPs&lt;/h3>
&lt;p>Fiatjaf publicou o artigo original do Nostr, &lt;a href="https://fiatjaf.com/nostr.html">&amp;ldquo;Notes and Other Stuff Transmitted by Relays&amp;rdquo;&lt;/a>, em 20 de novembro de 2020. Esse primeiro texto já continha a forma central que ainda define o protocolo: usuários assinam eventos com chaves, publicam-nos para relays e leem dos relays que escolhem. O &lt;a href="https://github.com/nostr-protocol/nostr/commits?since=2021-04-01&amp;amp;until=2021-04-30">log de commits &lt;code>nostr-protocol/nostr&lt;/code>&lt;/a> não mostra commits entre 1º e 30 de abril. A atividade fica de ambos os lados: commits de março de 2021 adicionaram links iniciais &amp;ldquo;nostwitter&amp;rdquo; e um filtro &lt;code>kind&lt;/code>, enquanto maio de 2021 redirecionou o NIP-02 e adicionou autoria de NIP.&lt;/p>
&lt;p>Em abril de 2021, não havia mercado público de clientes, nenhuma rede de relays visível e nenhum repositório NIPs. O protocolo ainda vivia como um pequeno documento e alguns experimentos. Nostr ainda não havia se tornado uma rede social ou uma plataforma de desenvolvimento. Era ainda um modelo relay/chave/evento aguardando sua primeira onda sustentada de contribuidores.&lt;/p>
&lt;h3 id="abril-de-2022-nips-ainda-viviam-no-repositório-principal">Abril de 2022: NIPs ainda viviam no repositório principal&lt;/h3>
&lt;p>Abril de 2022 foi o último mês antes dos NIPs saírem do repositório principal &lt;code>nostr-protocol/nostr&lt;/code>. Como a divisão ainda não havia acontecido, o repositório dedicado &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> não tinha histórico de pull requests de abril. No repositório principal, três commits de abril foram feitos: &lt;a href="https://github.com/nostr-protocol/nostr/commit/bae286312a233b971bee5429adda7aff41747eb8">&amp;ldquo;Update readme to add nip12&amp;rdquo;&lt;/a> em 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> em 25 de abril por jb55, e &lt;a href="https://github.com/nostr-protocol/nostr/commit/759997657f07e0344064228ffe5e93febe85d367">&amp;ldquo;add js formatting to sample code&amp;rdquo;&lt;/a> em 28 de abril por steliosrammos.&lt;/p>
&lt;p>O trabalho de clientes também começava a tomar forma. Commits do Damus de abril de 2022 adicionaram comportamento inicial de chatroom, manipulação de perfil e ícones do app, enquanto nostr-tools se tornava o caminho da biblioteca JavaScript para clientes iniciais e experimentos. No lado do protocolo, queries genéricas de tag NIP-12 deram à busca de tags um lugar documentado, a lista de kinds moveu o Nostr em direção a um modelo de registro, e melhores exemplos em JavaScript tornaram a especificação mais fácil de implementar para autores de clientes e bibliotecas. Em 1º de maio, fiatjaf moveu os NIPs para o repositório dedicado. Abril de 2022 foi o último mês da era original de repositório único.&lt;/p>
&lt;h3 id="abril-de-2023-expansão-de-aplicações-pós-damus">Abril de 2023: expansão de aplicações pós-Damus&lt;/h3>
&lt;p>Abril de 2023 chegou três meses após o Damus ser lançado na iOS App Store em 31 de janeiro de 2023, e após Jack Dorsey ter postado sua chave pública Nostr. A rede acabara de absorver sua primeira grande onda de crescimento público. Clientes como Damus, Snort, Iris, Coracle e Amethyst estavam ativos, enquanto operadores de relay estavam aprendendo o que um grafo social maior fazia com as suposições de largura de banda, spam, busca e moderação.&lt;/p>
&lt;p>Abril de 2023 teve um PR merged nos NIPs: &lt;a href="https://github.com/nostr-protocol/nips/pull/456">PR #456&lt;/a>, merged em 17 de abril, adicionando links de entidade bech32 NIP-19 ao tratamento de URI NIP-21. Os commits ao redor mostram a pressão de aplicação por trás do trabalho de protocolo. Abril de 2023 viu trabalho em &lt;a href="https://github.com/nostr-protocol/nips/commit/8b39976e78f90fe766ad7149e250777cddacbb5e">NIP-45 COUNT&lt;/a>, marcadores de zap específicos de evento, &lt;a href="https://github.com/nostr-protocol/nips/commit/bf0a0da6a48b96467172414d8e41dc72b0ca379c">NIP-15 marketplace&lt;/a>, semântica de delegação de exclusão NIP-26, metadados de arquivo NIP-94, tratamento de erros wallet-connect NIP-47 e &lt;a href="https://github.com/nostr-protocol/nips/commit/e91ce3409e1ce8267fc07a21784d2538621267c3">emoji personalizado NIP-30&lt;/a>. A lista de contribuidores havia se ampliado para incluir fiatjaf, staab, pablof7z, Semisol, CodyTseng, sethforprivacy, mikedilger, AsaiToshiya, alexgleason, martindsq, frbittencourt e arkin0x.&lt;/p>
&lt;p>Damus, Snort, Iris, Coracle e Amethyst não eram mais demos em torno de uma especificação; eram clientes de produção lidando com onboarding, feeds, spam, zaps, mídia e seleção de relay. O trabalho de protocolo de abril de 2023 se lê como o backlog que esses clientes criaram: zaps, marketplaces, metadados de arquivo, contagem, emoji e links de identidade todos empurraram a especificação além de notas e follows simples.&lt;/p>
&lt;h3 id="abril-de-2024-mensageria-privada-git-over-nostr-e-suporte-a-mantenedores">Abril de 2024: mensageria privada, git-over-Nostr e suporte a mantenedores&lt;/h3>
&lt;p>Abril de 2024 teve dois PRs de NIP merged. &lt;a href="https://github.com/nostr-protocol/nips/pull/1167">PR #1167&lt;/a>, merged em 10 de abril, corrigiu terminologia confusa em assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, onde clientes e signers precisam de linguagem exata para ações solicitadas e autorizadas. &lt;a href="https://github.com/nostr-protocol/nips/pull/1108">PR #1108&lt;/a>, merged em 17 de abril, expandiu repositórios git &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> com eventos de status, esclarecimentos, mantenedores opcionais, identificadores de repositório e tags de descobribilidade. Esse passo tornou git-over-Nostr mais prático para ngit e depois GitWorkshop.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/commit/df30012430c88d49fb5b124992b04d5c61b6338b">NIP-17&lt;/a>, anteriormente NIP-24, chegou em 24 de abril como mensagens seladas gift-wrapped para DMs privadas e pequenos chats em grupo. Trabalho de cliente e biblioteca ocorreu em paralelo: Amethyst, Primal, Gossip, nostr-tools, NDK e rust-nostr estavam todos ativos no mesmo período.&lt;/p>
&lt;p>OpenSats também anunciou suporte de longo prazo para desenvolvedores Nostr em abril de 2024: &lt;a href="https://opensats.org/blog/pablofz7-receives-lts-grant">PabloF7z&lt;/a> em 9 de abril, &lt;a href="https://opensats.org/blog/stuart-bowman-receives-lts-grant">Stuart Bowman&lt;/a> em 12 de abril, e &lt;a href="https://opensats.org/blog/hzrd149-receives-lts-grant">hzrd149&lt;/a> em 15 de abril. Esses grants moveram o financiamento de grants de projetos isolados em direção à manutenção sustentada de relays, bibliotecas e infraestrutura de clientes.&lt;/p>
&lt;h3 id="abril-de-2025-limpeza-densa-de-nip-e-formalização-do-blossom">Abril de 2025: limpeza densa de NIP e formalização do Blossom&lt;/h3>
&lt;p>Abril de 2025 foi o mês de protocolo mais denso nesta retrospectiva, com dezesseis PRs de NIP merged. O mês começou com &lt;a href="https://github.com/nostr-protocol/nips/pull/1846">PR #1846&lt;/a>, adicionando transações e endereços blockchain ao NIP-73, e &lt;a href="https://github.com/nostr-protocol/nips/pull/1865">PR #1865&lt;/a>, adicionando tags NIP-C0 à tabela de tags padronizada. Continuou com &lt;a href="https://github.com/nostr-protocol/nips/pull/1801">PR #1801&lt;/a> e &lt;a href="https://github.com/nostr-protocol/nips/pull/1889">PR #1889&lt;/a>, ambos melhorando a orientação de republicação de lista de relays kind &lt;code>10002&lt;/code>, e &lt;a href="https://github.com/nostr-protocol/nips/pull/1879">PR #1879&lt;/a>, que encolheu e esclareceu o &lt;a href="https://nostrcompass.org/pt/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> adicionou NIP-B7 para interação com Blossom, dando aos clientes Nostr e servidores Blossom uma camada de coordenação canônica após mais de um ano de prática informal. &lt;a href="https://github.com/nostr-protocol/nips/pull/1051">PR #1051&lt;/a> descontinuou o &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a>, a especificação de assinatura de evento delegada. O NIP-26 havia sido difícil de implementar com segurança e havia se tornado menos atraente à medida que o NIP-46 e outros padrões de signer amadureceram.&lt;/p>
&lt;p>O resto do mês combinou limpeza com expansão de aplicações: &lt;a href="https://github.com/nostr-protocol/nips/pull/1882">PR #1882&lt;/a> adicionou campos de política de privacidade e termos de serviço ao &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>, &lt;a href="https://github.com/nostr-protocol/nips/pull/1849">PR #1849&lt;/a> expandiu bookmarks web kind &lt;code>39701&lt;/code> sob o NIP-B0, &lt;a href="https://github.com/nostr-protocol/nips/pull/1891">PR #1891&lt;/a> adicionou esse kind de bookmark ao README, e &lt;a href="https://github.com/nostr-protocol/nips/pull/1895">PR #1895&lt;/a> adicionou tags padronizadas NIP-B0. OpenSats anunciou sua &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants">Décima Primeira Onda de Grants Nostr&lt;/a> em 16 de abril, financiando Swae, HAMSTR, Vertex, Nostr Double Ratchet e Nostr Game Engine. Primal, Coracle, noStrudel, nostr-tools, NDK e rust-nostr também estavam entregando através deste período, então a limpeza de protocolo ficava próxima do trabalho ativo de cliente e biblioteca.&lt;/p>
&lt;h3 id="abril-de-2026-fortalecimento-do-nip-34-badges-e-grants-focados-em-adoção">Abril de 2026: fortalecimento do NIP-34, badges e grants focados em adoção&lt;/h3>
&lt;p>Abril de 2026, o mês que este issue encerra, teve quatro PRs de NIP merged. O primeiro foi o &lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>, merged em 1º de abril, que mudou os badges de perfil &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">NIP-58&lt;/a> para kind &lt;code>10008&lt;/code> e adicionou conjuntos de badges kind &lt;code>30008&lt;/code>, tornando a atribuição de badges e coleções de badges mais componíveis. Uma segunda mudança de usabilidade git-over-Nostr chegou no &lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>, merged em 10 de abril, adicionando semântica de URL de clone &lt;code>nostr://&lt;/code> ao &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a>. As limpezas de 25 de abril, &lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a> e &lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>, removeram linguagem não usada e incorreta do NIP-34.&lt;/p>
&lt;p>Commits relacionados afiam as mesmas superfícies. Em 22 de abril, fiatjaf adicionou uma lista de servidores Blossom ao NIP-51 e ajustou a edição de metadados NIP-29 para corresponder ao comportamento estilo PUT do Flotilla. Em 26 de abril, ele renomeou o NIP-5A para clareza. Abril de 2026 focou em tornar superfícies de protocolo já usadas mais fáceis de implementar e mais difíceis de interpretar mal.&lt;/p>
&lt;p>OpenSats anunciou sua &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">Décima Sexta Onda de Grants Nostr&lt;/a> em 8 de abril, apoiando Amethyst Desktop, Nostr Mail, Nostrord, Nurunuru (null&amp;ndash;nostr) e uma renovação do HAMSTR: clientes desktop, mensageria estilo email, UX de grupo, onboarding em japonês e conectividade off-grid.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Obrigado por ler o Nostr Compass #20. &lt;a href="https://nostr.com">Mande uma DM para nós no Nostr&lt;/a> com dicas, correções ou novos projetos para cobrir.&lt;/em>&lt;/p></content:encoded></item><item><title>Nostr Compass #19</title><link>https://nostrcompass.org/pt/newsletters/2026-04-22-newsletter/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-04-22-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> faz uma grande rodada de trabalho em Marmot, comunidades e salas de áudio com MoQ; &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> estabiliza acesso à internet pay-per-use sobre Nostr e Cashu na v0.1.0; e &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> fecha uma semana intensa de trabalho em relay em torno de &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a>, compressão, hardening de consultas e paridade completa com &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>. Forgesworn publica uma stack completa de assinatura, identidade e APIs pagas para Nostr. ShockWallet continua avançando em fluxos de carteira Lightning nativos de Nostr. A suíte Formstr, Pollerama, Forms e Calendar, mergeia 26 PRs em hardening de segurança, i18n e suporte a RRULE. StableKraft, Keep, topaz, WoT Relay, Flotilla e NipLock completam a lista de lançamentos. Os deep dives cobrem &lt;a href="https://nostrcompass.org/pt/topics/nip-72/">NIP-72&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a>.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> faz uma grande rodada de trabalho em Marmot, comunidades e salas de áudio com MoQ; &lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> estabiliza acesso à internet pay-per-use sobre Nostr e Cashu na v0.1.0; e &lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> fecha uma semana intensa de trabalho em relay em torno de &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a>, compressão, hardening de consultas e paridade completa com &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>. Forgesworn publica uma stack completa de assinatura, identidade e APIs pagas para Nostr. ShockWallet continua avançando em fluxos de carteira Lightning nativos de Nostr. A suíte Formstr, Pollerama, Forms e Calendar, mergeia 26 PRs em hardening de segurança, i18n e suporte a RRULE. StableKraft, Keep, topaz, WoT Relay, Flotilla e NipLock completam a lista de lançamentos. Os deep dives cobrem &lt;a href="https://nostrcompass.org/pt/topics/nip-72/">NIP-72&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a>.&lt;/p>
&lt;h2 id="top-stories">Top Stories&lt;/h2>
&lt;h3 id="amethyst-lança-conformidade-mip-do-marmot-comunidades-nip-72-metas-de-zap-e-salas-de-áudio-com-moq">Amethyst lança conformidade MIP do Marmot, comunidades NIP-72, metas de zap e salas de áudio com MoQ&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, mergeou 57 PRs nesta semana. Os temas centrais são conformidade de grupos criptografados com &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, comunidades moderadas de primeira classe, metas de zap em live streams e uma nova stack de salas de áudio construída sobre Media over QUIC.&lt;/p>
&lt;p>No trabalho de conformidade com Marmot, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2462">PR #2462&lt;/a> alinha a implementação embarcada de &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> com os formatos wire de MIP-01 e MIP-05, adicionando codificação VarInt de prefixos de comprimento estilo TLS e validação round-trip contra vetores de teste do MDK. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2435">PR #2435&lt;/a> adiciona suporte a MIP-00 KeyPackage Relay List, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2436">PR #2436&lt;/a> fecha lacunas restantes de admin gate e tratamento de mídia identificadas por testes cross-client com &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>. Duas correções de corretude chegaram no mesmo dia: o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2466">PR #2466&lt;/a> corrige o framing de commits MLS para que welcomes criptografados serializem os mesmos bytes produzidos por mdk-core, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2471">PR #2471&lt;/a> resolve um bug de descriptografia da camada externa que causava divergência de estado entre co-admins do Marmot. Uma segunda rodada de conformidade, nos &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2477">PR #2477&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2493">PR #2493&lt;/a>, fecha lacunas adicionais em commits e criptografia de mensagens e adiciona um validador completo da criptografia de commits MLS contra vetores de referência.&lt;/p>
&lt;p>Ao lado do trabalho de protocolo, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2488">PR #2488&lt;/a> lança &lt;code>amy&lt;/code>, uma ferramenta de linha de comando para operações de grupo em Marmot e MLS dirigida pela implementação do próprio Amethyst. Amy dá a integradores um caminho scriptável para criar grupos, gerar KeyPackages, simular welcomes e validar commits contra um signer real do Amethyst, fechando hoje a maior lacuna de debugging para interop cross-client de Marmot.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a> adiciona criação e gerenciamento de comunidades &lt;a href="https://nostrcompass.org/pt/topics/nip-72/">NIP-72&lt;/a> como recursos de primeira classe. Usuários podem criar a definição de comunidade kind &lt;code>34550&lt;/code>, adicionar moderadores e relay hints, enviar posts com uma tag &lt;code>a&lt;/code> apontando para a comunidade e gerenciar aprovações pendentes por meio de eventos kind &lt;code>4549&lt;/code>. O recurso fecha uma lacuna antiga entre Amethyst e &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> no campo de moderação de comunidades. Os &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2458">PR #2458&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2473">PR #2473&lt;/a> adicionam suporte a emoji sets e uma UI completa para gerenciamento de emoji packs da &lt;a href="https://github.com/nostr-protocol/nips/blob/master/30.md">NIP-30&lt;/a>.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a> conecta metas de zap &lt;a href="https://nostrcompass.org/pt/topics/nip-75/">NIP-75&lt;/a> à tela Live Activities da &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a>. Cada live stream agora carrega um cabeçalho de meta de arrecadação com barra de progresso, botão de zap com um toque e ranking dos principais zappers. O ranking lê recibos de zap kind &lt;code>9735&lt;/code> vinculados ao evento kind &lt;code>30311&lt;/code> da stream e os soma em relação ao alvo &lt;code>amount&lt;/code> da meta. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2486">PR #2486&lt;/a> completa a superfície de live streams com uma tela dedicada de feed, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2491">PR #2491&lt;/a> adiciona proof of agreement e helpers de event builder para NIP-53, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2461">PR #2461&lt;/a> adiciona HLS na menor resolução no feed, picture-in-picture e seleção automática de resolução em tela cheia.&lt;/p>
&lt;p>A superfície nova mais ambiciosa é o áudio em tempo real. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2494">PR #2494&lt;/a> adiciona um cliente de transporte &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> e suporte a salas de áudio. O modelo pub-sub do MoQ sobre QUIC se ajusta melhor a áudio ao vivo do que relays WebSocket, porque clientes podem assinar tracks e prioridades específicas e deixar o transporte lidar com congestionamento. Junto da nova tela Public Chats no &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2487">PR #2487&lt;/a>, o Amethyst agora tem uma superfície end-to-end para salas públicas de áudio ao lado de seu sistema de mensagens criptografadas com Marmot.&lt;/p>
&lt;p>No lado de descoberta e confiabilidade, os &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2485">PR #2485&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2490">PR #2490&lt;/a> adicionam um feed de descoberta de Follow Packs e conectam conjuntos curados de follows ao onboarding padrão, dando a usuários novos uma timeline preenchida já no primeiro lançamento. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1983">PR #1983&lt;/a> entrega um serviço de notificações sempre ativo para conexões em tempo real com relays, para que DMs Marmot e mentions cheguem sem que o app esteja em foreground, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2480">PR #2480&lt;/a> adiciona cache on-demand de vídeo HLS com dimensionamento adaptativo do cache.&lt;/p>
&lt;h3 id="tollgate-v010-estabiliza-acesso-à-internet-pay-per-use-sobre-nostr-e-cashu">TollGate v0.1.0 estabiliza acesso à internet pay-per-use sobre Nostr e Cashu&lt;/h3>
&lt;p>&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> cortou seu release &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a> em 21 de abril, o primeiro snapshot com tag do seu conjunto de especificações para acesso à rede pay-per-use. O protocolo permite que um dispositivo capaz de controlar conectividade, como um roteador WiFi, um switch Ethernet ou um tether Bluetooth, anuncie preços, aceite tokens de ecash &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> e gerencie sessões por meio de tokens locais pré-pagos em vez de contas ou assinaturas. Um cliente com alguns sats em uma carteira Cashu local consegue comprar o próximo minuto ou megabyte de conectividade de qualquer TollGate compatível na rede.&lt;/p>
&lt;p>O release fixa três camadas da arquitetura. A camada de protocolo, definida em &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-01.md">TIP-01&lt;/a>, especifica três formatos básicos de evento, Advertisement, Session e Notice, e a &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-02.md">TIP-02&lt;/a> adiciona pagamentos Cashu por cima, para que um cliente possa resgatar tokens de qualquer mint anunciada pelo gate. Acima disso está a camada de interface: &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/HTTP-01.md">HTTP-01&lt;/a> até HTTP-03 definem uma superfície em HTTP simples para dispositivos em sistemas operacionais restritivos, e &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/NOSTR-01.md">NOSTR-01&lt;/a> define o transporte por relay Nostr para clientes que conseguem abrir WebSockets. Por fim, &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/WIFI-01.md">WIFI-01&lt;/a> cobre a camada de meio, descrevendo o roteamento de captive portal para clientes pagantes.&lt;/p>
&lt;p>Como o ativo de pagamento é um bearer token, um cliente pode chegar já com Cashu em uma carteira local e gastá-lo imediatamente para o primeiro minuto de conectividade. Gates também podem comprar uplink uns dos outros, então o alcance vai além de um único operador. A nova &lt;a href="https://nostrcompass.org/pt/topics/tollgate/">página de tópico do TollGate&lt;/a> cobre a pilha completa de camadas.&lt;/p>
&lt;h3 id="nostream-mergeia-53-prs-para-nip-45-nip-62-compressão-e-hardening-de-consultas">nostream mergeia 53 PRs para NIP-45, NIP-62, compressão e hardening de consultas&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>, a implementação de relay em TypeScript do Cameri, mergeou 53 PRs em uma única semana cobrindo novo suporte a NIPs, desempenho de consulta, hardening de segurança e polimento operacional.&lt;/p>
&lt;p>No trabalho de features, o &lt;a href="https://github.com/Cameri/nostream/pull/522">PR #522&lt;/a> adiciona suporte &lt;code>COUNT&lt;/code> da &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a>, permitindo que clientes perguntem ao relay quantos eventos correspondem a um filtro sem buscá-los, e o &lt;a href="https://github.com/Cameri/nostream/pull/544">PR #544&lt;/a> adiciona o right-to-vanish da &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> à lista de features anunciadas. O &lt;a href="https://github.com/Cameri/nostream/pull/548">PR #548&lt;/a> estende o schema de filtros para aceitar filtros de tags em maiúsculas, &lt;code>#A&lt;/code> até &lt;code>#Z&lt;/code>, seguindo as convenções recentes de case em tags, e o &lt;a href="https://github.com/Cameri/nostream/pull/514">PR #514&lt;/a> adiciona compressão gzip e xz à importação e exportação de eventos para que operadores consigam mover grandes dumps entre nós sem tooling extra.&lt;/p>
&lt;p>Desempenho e corretude de consulta chegam via &lt;a href="https://github.com/Cameri/nostream/pull/534">PR #534&lt;/a>, que introduz um benchmark harness e uma rodada de otimização na tradução de filtros para SQL. O &lt;a href="https://github.com/Cameri/nostream/pull/524">PR #524&lt;/a> corrige um bug de correspondência de pubkeys em whitelist e blacklist trocando prefix matching por verificação de correspondência exata, o &lt;a href="https://github.com/Cameri/nostream/pull/553">PR #553&lt;/a> adiciona um tie-breaker determinístico a &lt;code>upsertMany&lt;/code> para que inserts concorrentes não disputem mais timestamps &lt;code>created_at&lt;/code> iguais, e o &lt;a href="https://github.com/Cameri/nostream/pull/493">PR #493&lt;/a> restringe a confiança em &lt;code>X-Forwarded-For&lt;/code> apenas a proxies configurados como confiáveis. O &lt;a href="https://github.com/Cameri/nostream/pull/557">PR #557&lt;/a> leva o relay à paridade completa com &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>, alinhando todos os campos anunciados com a spec atual, incluindo limites de retenção, hints de autenticação e o conjunto reduzido de campos opcionais.&lt;/p>
&lt;h2 id="shipping-this-week">Shipping This Week&lt;/h2>
&lt;h3 id="primal-android-lança-aba-explore-verificação-nip-05-e-player-de-áudio">Primal Android lança aba Explore, verificação NIP-05 e player de áudio&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> empurrou 11 PRs mergeadas em cima do redesenho de feed da semana passada. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1021">PR #1021&lt;/a> introduz uma nova aba Explore construída em torno de usuários populares, follow packs e feeds curados, e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1015">PR #1015&lt;/a> adiciona um editor de feed que pré-preenche a partir da DSL de Advanced Search do Primal. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/994">PR #994&lt;/a> entrega UI de verificação &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a> para perfis, e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/997">PR #997&lt;/a> embute um player de áudio no feed para anexos de arquivos de áudio. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1018">PR #1018&lt;/a> adiciona pareamento nostr-connect &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> a partir do scanner de QR da carteira, reutilizando o mesmo caminho de câmera para signer pairing e wallet linking.&lt;/p>
&lt;h3 id="strfry-adiciona-métricas-prometheus-do-caminho-de-escrita-e-corrige-envelope-auth-da-nip-42">strfry adiciona métricas Prometheus do caminho de escrita e corrige envelope AUTH da NIP-42&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> lançou um lote de melhorias voltadas a operadores. O &lt;a href="https://github.com/hoytech/strfry/pull/194">PR #194&lt;/a> adiciona um exporter Prometheus dedicado para métricas do caminho de escrita e um novo gauge de conexões, e o &lt;a href="https://github.com/hoytech/strfry/pull/197">PR #197&lt;/a> registra bytes enviados e recebidos por conexão, além de índices de compressão para operadores acompanhando largura de banda. O &lt;a href="https://github.com/hoytech/strfry/pull/192">PR #192&lt;/a> promove o limite hardcoded de tags em filtros a uma opção configurável em runtime. Em corretude de protocolo, o &lt;a href="https://github.com/hoytech/strfry/pull/201">PR #201&lt;/a> altera respostas de falha AUTH da &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> de uma mensagem &lt;code>NOTICE&lt;/code> para o envelope &lt;code>OK&lt;/code> que a NIP realmente especifica, resolvendo uma incompatibilidade antiga para relays com autenticação obrigatória.&lt;/p>
&lt;h3 id="shopstr-reforça-segurança-de-storefront-em-13-prs">Shopstr reforça segurança de storefront em 13 PRs&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, o cliente marketplace Nostr, mergeou 13 PRs nesta semana dominadas por correções de segurança. O &lt;a href="https://github.com/shopstr-eng/shopstr/pull/434">PR #434&lt;/a> fecha uma falha de JavaScript armazenado em links de storefront que permitia execução de scripts do vendedor no navegador do visitante, o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/417">PR #417&lt;/a> escapa a renderização HTML da policy do storefront para bloquear XSS refletido, e o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/418">PR #418&lt;/a> fecha uma API de deleção de eventos em cache sem autenticação que permitia remoção de dados entre usuários. O &lt;a href="https://github.com/shopstr-eng/shopstr/pull/433">PR #433&lt;/a> exige autenticação para leitura de mensagens em cache, o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/419">PR #419&lt;/a> protege endpoints de mutação da storefront e do event cache atrás de auth adequada, e os &lt;a href="https://github.com/shopstr-eng/shopstr/pull/435">PR #435&lt;/a> e &lt;a href="https://github.com/shopstr-eng/shopstr/pull/414">PR #414&lt;/a> corrigem dois achados de SSRF de code scanning. No lado funcional, o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/421">PR #421&lt;/a> torna segura contra replay a fila de publicações em relays que falharam, o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/425">PR #425&lt;/a> repara uma busca quebrada de wallet events, e o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/392">PR #392&lt;/a> revalida descontos salvos no carrinho antes do checkout.&lt;/p>
&lt;h3 id="nostria-v3126-até-v3128-adiciona-reprodução-de-música-em-background-no-android">Nostria v3.1.26 até v3.1.28 adiciona reprodução de música em background no Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> cortou seis releases nesta semana, da &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.22">v3.1.22&lt;/a> à &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a>. A principal mudança da &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.26">v3.1.26&lt;/a> é reprodução de música em background no Android: o app se mantém ativo enquanto o áudio toca, com controles de mídia na barra de notificações e na lock screen. As releases seguintes, &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.27">v3.1.27&lt;/a> e &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a>, fazem hardening dessa nova superfície de serviço de mídia. A &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">Newsletter #18&lt;/a> cobriu o ciclo anterior, com geração local de imagens.&lt;/p>
&lt;h3 id="wisp-v0180-beta-adiciona-normie-mode-feed-for-you-e-configuração-de-grupos-nip-29">Wisp v0.18.0-beta adiciona Normie Mode, feed For You e configuração de grupos NIP-29&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, o cliente Android em Kotlin e Jetpack Compose de barrydeen, lançou a &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.18.0-beta">v0.18.0-beta&lt;/a> em 16 de abril. O release mira usuários vindos de contextos menos Bitcoin-native: o &lt;a href="https://github.com/barrydeen/wisp/pull/462">PR #462&lt;/a> adiciona um Normie Mode que mostra valores denominados em fiat em todo o app, e o &lt;a href="https://github.com/barrydeen/wisp/pull/464">PR #464&lt;/a> reformula o onboarding com seletor de tópicos e um coach para o primeiro post. O &lt;a href="https://github.com/barrydeen/wisp/pull/469">PR #469&lt;/a> adiciona um feed For You que mistura follows estendidos, eventos em alta e hashtags seguidas.&lt;/p>
&lt;p>No trabalho de protocolo, o &lt;a href="https://github.com/barrydeen/wisp/pull/471">PR #471&lt;/a> adiciona configuração de grupos &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> para flags, invites, papéis e prompts AUTH, e o &lt;a href="https://github.com/barrydeen/wisp/pull/478">PR #478&lt;/a> corrige uma falha de ordenação para que o Wisp espere AUTH &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> antes de emitir eventos de grupo &lt;code>9021&lt;/code>, &lt;code>9007&lt;/code> e &lt;code>9009&lt;/code>, além de mostrar falhas do lado do admin. O &lt;a href="https://github.com/barrydeen/wisp/pull/481">PR #481&lt;/a> faz broadcast de notas aos inbox relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> das pubkeys mencionadas para que replies alcancem seus alvos mesmo quando conjuntos de relays de remetente e destinatário não se sobrepõem.&lt;/p>
&lt;h3 id="noornote-v084-adiciona-posts-agendados-e-zaps-em-live-stream">NoorNote v0.8.4 adiciona posts agendados e zaps em live stream&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> lançou a &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.4">v0.8.4&lt;/a> e a &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.5">v0.8.5&lt;/a>. A principal adição da v0.8.4 é um add-on de Scheduled Posts: o app entrega um evento totalmente assinado a um relay operado pela NoorNote, que o publica no momento agendado, então as chaves privadas nunca saem do dispositivo. O mesmo release adiciona zaps com um toque em cards de live stream, em que os sats aparecem na sobreposição de chat da stream via &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a>, e mantém o saldo da carteira visível quando a API de cotação fiat fica temporariamente indisponível. A v0.8.5 corrige um bug de deduplicação de timeline que causava posts duplicados em longos scrolls no Android.&lt;/p>
&lt;h3 id="topaz-v002-lança-um-relay-nostr-para-android">topaz v0.0.2 lança um relay Nostr para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a>, um novo relay Nostr que roda em telefones Android, de &lt;a href="https://github.com/fiatjaf">fiatjaf&lt;/a>, publicou a &lt;a href="https://github.com/fiatjaf/topaz/releases/tag/v0.0.2">v0.0.2&lt;/a> em 2026-04-17. O projeto é Kotlin-first e posiciona o telefone como um relay pessoal sempre disponível. Nesta fase o escopo é estreito: um relay funcional dentro de um pacote Android instalável.&lt;/p>
&lt;h3 id="stablekraft-v100-lança-o-primeiro-release-estável-da-pwa-de-música-e-podcasts">StableKraft v1.0.0 lança o primeiro release estável da PWA de música e podcasts&lt;/h3>
&lt;p>&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a> é uma PWA em Next.js para descobrir, organizar e transmitir música puxada de feeds de podcast, usando Nostr para auth e recursos sociais e Lightning para pagamentos V4V. Ela chegou à &lt;a href="https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.0.0">v1.0.0&lt;/a> em 2026-04-18. Na mesma semana, o projeto endureceu ingestão de feeds com um &lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/7ac90f6">cache OPML de 15 minutos e stripping de XML inválido&lt;/a> e reduziu a janela de nightly reparse de 720 horas para 24 horas em um &lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/fbf337b">ajuste posterior&lt;/a>, acelerando a autocorreção de feeds recém-adicionados.&lt;/p>
&lt;h3 id="niplock-lança-um-gerenciador-de-senhas-baseado-em-nip-17">NipLock lança um gerenciador de senhas baseado em NIP-17&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a> é um gerenciador de senhas que armazena e sincroniza credenciais entre dispositivos usando mensagens diretas gift-wrapped da &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>. Cada entrada de senha é uma DM NIP-17 da chave do próprio usuário para ela mesma, então os mesmos eventos se replicam para qualquer dispositivo autenticado com essa chave. A assinatura funciona com &lt;code>nsec&lt;/code> bruto, extensões de navegador como &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> ou &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> via &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, o que mantém a chave mestra fora do dispositivo cliente.&lt;/p>
&lt;h3 id="flotilla-budabit-refina-sua-superfície-de-repositórios-nip-34">flotilla-budabit refina sua superfície de repositórios NIP-34&lt;/h3>
&lt;p>O fork da comunidade Budabit do &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>, chamado &lt;a href="https://github.com/Pleb5/flotilla-budabit">flotilla-budabit&lt;/a>, lançou um conjunto de correções em seu fluxo de git-over-nostr da NIP-34. As atualizações desta semana &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/a6fb67e">restauram controles de discussão de repositório&lt;/a>, &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/e2b891a">mantêm abas fixas visíveis em páginas de detalhe&lt;/a>, &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/43d5e9e">carregam anúncios de repositório a partir de relays GRASP salvos&lt;/a> e &lt;a href="https://github.com/Pleb5/flotilla-budabit/commit/2dbb9f0">sincronizam o estado de patch aplicado pelo mantenedor&lt;/a>. Mantendo-se próximo ao upstream do Flotilla, o fork prioriza a view de repositórios para contribuidores da comunidade Budabit.&lt;/p>
&lt;h3 id="rx-nostr-372-até-374-adicionam-verificador-padrão-e-argumentos-opcionais-no-construtor">rx-nostr 3.7.2 até 3.7.4 adicionam verificador padrão e argumentos opcionais no construtor&lt;/h3>
&lt;p>&lt;a href="https://github.com/penpenpng/rx-nostr">rx-nostr&lt;/a>, a biblioteca Nostr baseada em RxJS, lançou &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.2">3.7.2&lt;/a>, &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.3">3.7.3&lt;/a> e &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.4">3.7.4&lt;/a>. O &lt;a href="https://github.com/penpenpng/rx-nostr/pull/192">PR #192&lt;/a> adiciona um verificador padrão de assinaturas Schnorr, eliminando a necessidade de quem chama ligar um verificador manualmente, e uma release emparelhada &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/crypto%403.1.6">crypto@3.1.6&lt;/a> corrige um bug de uso em &lt;code>@noble/curves&lt;/code> que estava produzindo falhas espúrias de verificação. O &lt;a href="https://github.com/penpenpng/rx-nostr/pull/195">PR #195&lt;/a>, na 3.7.4, torna opcionais os argumentos de &lt;code>createRxNostr()&lt;/code>, permitindo integrações rápidas com zero configuração.&lt;/p>
&lt;h3 id="keep-android-v100-lança-builds-reproduzíveis-e-zero-trackers">Keep Android v1.0.0 lança builds reproduzíveis e zero trackers&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, um gerenciador de senhas e segredos nativo de Nostr, lançou a &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.0.0">v1.0.0&lt;/a> em 21 de abril após uma série de PRs de hardening. O &lt;a href="https://github.com/privkeyio/keep-android/pull/241">PR #241&lt;/a> adiciona uma receita de build reproduzível com toolchain fixada e verificada, o &lt;a href="https://github.com/privkeyio/keep-android/pull/248">PR #248&lt;/a> troca Google ML Kit por ZXing para remover dependência de Google Play Services, e o &lt;a href="https://github.com/privkeyio/keep-android/pull/252">PR #252&lt;/a> publica um &lt;a href="https://reports.exodus-privacy.eu.org/en/">scan do Exodus Privacy&lt;/a> mostrando zero trackers na build v1.0.0. O &lt;a href="https://github.com/privkeyio/keep-android/pull/256">PR #256&lt;/a> adiciona um manifesto &lt;code>zapstore.yaml&lt;/code> para que o APK possa ser distribuído via &lt;a href="https://zapstore.dev">zapstore&lt;/a> sem publisher intermediário.&lt;/p>
&lt;h3 id="flotilla-173-e-174-adicionam-encapsulamento-kind-9-para-salas-nip-29-mais-ricas">Flotilla 1.7.3 e 1.7.4 adicionam encapsulamento kind 9 para salas NIP-29 mais ricas&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>, o cliente de grupos &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> do hodlbod, lançou &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.3">1.7.3&lt;/a> e &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.4">1.7.4&lt;/a>. A principal mudança de protocolo é o encapsulamento em kind &lt;code>9&lt;/code> de tipos de conteúdo que não são chat, anunciado na &lt;a href="#ZgotmplZ">nota de release do hodlbod&lt;/a> e rastreada contra o &lt;a href="https://github.com/nostr-protocol/nips/pull/2310">NIP PR #2310&lt;/a>. Encapsular eventos de calendário, enquetes e outros payloads em kind &lt;code>9&lt;/code> preserva o contexto da sala quando esses objetos são enviados a um grupo, permitindo que clientes renderizem o objeto embutido sem perder de qual sala ele veio.&lt;/p>
&lt;p>Essa mesma linha de release adiciona enquetes, suporte ao esquema de URL Aegis para login &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, compartilhamento nativo de invites para spaces, room mentions, colagem de imagem da área de transferência no mobile, drafts, vídeo em chamadas e melhorias de paginação do feed. É o primeiro release do Flotilla desde &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">1.7.0 e 1.7.1&lt;/a>, cobertos na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/">Newsletter #16&lt;/a> por salas de voz e login por email.&lt;/p>
&lt;h3 id="wot-relay-v021-migra-eventstore-para-lmdb">WoT Relay v0.2.1 migra eventstore para LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a>, o relay filtrado por web of trust da bitvora, lançou a &lt;a href="https://github.com/bitvora/wot-relay/releases/tag/v0.2.1">v0.2.1&lt;/a> em 2026-04-22. O &lt;a href="https://github.com/bitvora/wot-relay/pull/97">PR #97&lt;/a> migra o eventstore para &lt;a href="http://www.lmdb.tech/">LMDB&lt;/a> e recalibra os fetches iniciais do grafo WoT para que o relay construa seu trust graph sem esgotar orçamentos de leitura upstream, e o &lt;a href="https://github.com/bitvora/wot-relay/pull/99">PR #99&lt;/a> faz upgrade de &lt;code>golang.org/x/crypto&lt;/code> para v0.45.0 com as correções de segurança correspondentes. O &lt;a href="https://github.com/bitvora/wot-relay/pull/100">PR #100&lt;/a> atualiza a URL de software e a string de versão anunciadas via &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> para o release.&lt;/p>
&lt;h3 id="suíte-formstr-hardening-do-pollerama-i18n-no-forms-suporte-a-rrule-no-calendar">Suíte Formstr: hardening do Pollerama, i18n no Forms, suporte a RRULE no Calendar&lt;/h3>
&lt;p>A suíte Formstr mergeou 26 PRs nesta semana, espalhadas por Pollerama, Formstr Forms e Nostr Calendar, com um tema claro de segurança no app de enquetes e trabalho de feature no restante.&lt;/p>
&lt;p>&lt;a href="https://pollerama.fun">Pollerama&lt;/a>, o app &lt;a href="https://github.com/formstr-hq/nostr-polls">nostr-polls&lt;/a> para criação e voto em enquetes Nostr, endureceu seu tratamento de chaves. O &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/182">PR #182&lt;/a> expira DMs em cache no logout para que um dispositivo compartilhado não vaze estado do usuário anterior, o &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/175">PR #175&lt;/a> move a chave local para armazenamento seguro do navegador, e o &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/171">PR #171&lt;/a> protege &lt;code>JSON.parse&lt;/code> do conteúdo de perfil kind &lt;code>0&lt;/code> em todo caminho de login, para que um perfil malformado não derrube a sessão. No lado de produto, o &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/186">PR #186&lt;/a> conecta deep linking HTTPS de &lt;code>pollerama.fun&lt;/code>, e o &lt;a href="https://github.com/formstr-hq/nostr-polls/pull/169">PR #169&lt;/a> torna clicáveis os nomes de autores nos resultados.&lt;/p>
&lt;p>&lt;a href="https://formstr.app">Formstr&lt;/a>, a suíte &lt;a href="https://github.com/formstr-hq/nostr-forms">nostr-forms&lt;/a> para forms nativos de Nostr, ampliou sua superfície de input e onboarding. O &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/475">PR #475&lt;/a> adiciona suporte a URLs de áudio e vídeo para embeds de mídia dentro dos forms, o &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/439">PR #439&lt;/a> introduz i18n no app web, e o &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/466">PR #466&lt;/a> entrega um importador de onboarding para Google Forms, permitindo que criadores migrem sem reconstruir pesquisas do zero. O &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/463">PR #463&lt;/a> fecha um vazamento de privacidade removendo logs sensíveis de chaves do console do navegador.&lt;/p>
&lt;p>&lt;a href="https://calendar.formstr.app">Nostr Calendar by Formstr&lt;/a> lançou &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.3.0">v1.3.0&lt;/a> e &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.0">v1.4.0&lt;/a> no mesmo dia, com destaque para uma superfície adequada de regras de recorrência. O &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/107">PR #107&lt;/a> adiciona suporte a RRULE múltiplo e customizado, e o &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/101">PR #101&lt;/a> corrige um bug antigo ao interpretar datas RRULE flutuantes como UTC segundo a RFC 5545, eliminando deriva de horário entre timezones. O &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/97">PR #97&lt;/a> permite adicionar eventos compartilhados ao calendário pessoal, o &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/86">PR #86&lt;/a> introduz preferências de notificação por lista, e o &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/112">PR #112&lt;/a> entrega o caminho retrabalhado de login e loading presente na v1.4.0. Os três projetos se apoiam em eventos de calendário da &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> e compartilham a mesma stack de login.&lt;/p>
&lt;h3 id="também-lançaram-notedeck-nostrblue-cliprelay-captains-log">Também lançaram: notedeck, nostr.blue, cliprelay, Captain&amp;rsquo;s Log&lt;/h3>
&lt;p>Um punhado de clientes lançou releases iterativas sem um recurso dominante. O cliente em Rust da equipe Damus, &lt;a href="https://github.com/damus-io/notedeck">notedeck&lt;/a>, publicou a &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.4">v0.10.0-beta.4&lt;/a> com correções em rendering de colunas e relay pool. O cliente em Rust baseado em Dioxus &lt;a href="https://github.com/patrickulrich/nostr.blue/releases/tag/v0.8.6">nostr.blue v0.8.6&lt;/a> puxou o &lt;a href="https://github.com/patrickulrich/nostr.blue/commit/d90b4ff">Dioxus 0.7.5&lt;/a> e destravou a build Android ao &lt;a href="https://github.com/patrickulrich/nostr.blue/commit/4207f0c">converter a bridge de áudio nativa&lt;/a> em um plugin &lt;code>manganis::ffi&lt;/code>. &lt;a href="https://github.com/tajava2006/cliprelay">cliprelay&lt;/a>, uma ferramenta de sincronização de clipboard entre dispositivos que retransmite entradas por Nostr, lançou &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/desktop%2Fv0.0.3">Desktop v0.0.3&lt;/a> e &lt;a href="https://github.com/tajava2006/cliprelay/releases/tag/android%2Fv0.0.4">Android v0.0.4&lt;/a>, ajustando o loop de sync e removendo variantes Android de 32 bits. &lt;a href="https://github.com/nodetec/comet">Captain&amp;rsquo;s Log&lt;/a> publicou três builds alpha cujo recurso mais útil é &lt;a href="https://github.com/nodetec/comet/releases/tag/alpha-95f47bd">detecção de liveness&lt;/a> no sync relay, substituindo sockets caídos sem ação do usuário.&lt;/p>
&lt;h2 id="in-development">In Development&lt;/h2>
&lt;h3 id="whitenoise-rs-refatora-para-views-de-conta-com-escopo-de-sessão">whitenoise-rs refatora para views de conta com escopo de sessão&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>, o daemon em Rust por baixo do cliente &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, mergeou 15 PRs avançando uma refatoração em múltiplas fases, saindo de singletons globais para views &lt;code>AccountSession&lt;/code> por conta. O objetivo é quebrar um monólito compartilhado em superfícies menores por conta, mais fáceis de entender, testar e evoluir sem vazamento de efeitos colaterais pelo daemon inteiro.&lt;/p>
&lt;p>A fundação veio com o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/743">PR #743&lt;/a>, que introduz &lt;code>AccountSession&lt;/code> e &lt;code>AccountManager&lt;/code>, seguida por relay handles com escopo por conta no &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/753">PR #753&lt;/a>. Fases posteriores moveram drafts e settings, operações de mensagem, leitura e escrita de grupo, membership, push notifications, leituras de key packages e criação de grupo para superfícies pertencentes à sessão ao longo dos &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pulls?q=is%3Apr&amp;#43;is%3Amerged&amp;#43;768&amp;#43;OR&amp;#43;763&amp;#43;OR&amp;#43;766">PRs #760 até #769&lt;/a>. A fase 15 fecha o ciclo no &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/770">PR #770&lt;/a>, que transfere o dispatch de eventos para a sessão, fazendo com que cada conta consuma seu próprio tráfego de relay sem contenção em um dispatcher compartilhado.&lt;/p>
&lt;h3 id="white-noise-adiciona-ui-de-blockunblock-leave-group-e-avisos-offline">White Noise adiciona UI de block/unblock, leave-group e avisos offline&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, o cliente &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, adicionou os controles que faltavam no ciclo de vida dos grupos. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/578">PR #578&lt;/a> lança a UI de block e unblock em cima de um block hook introduzido no &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/573">PR #573&lt;/a>, e o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/571">PR #571&lt;/a>, junto do &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/572">PR #572&lt;/a>, conecta &lt;code>clear_chat&lt;/code>, &lt;code>delete_chat&lt;/code> e &lt;code>leave_and_delete_group&lt;/code> do lado Rust ao app. Os &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/569">PR #569&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/576">PR #576&lt;/a> adicionam avisos offline nas telas de chat e settings para que usuários saibam quando o daemon não consegue alcançar seus relays. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/585">PR #585&lt;/a> estreita o caminho amplo de delete all key packages para uma operação de delete legacy key packages, evitando que um cliente em migração entre formatos de KeyPackage apague chaves atuais junto das legadas.&lt;/p>
&lt;h3 id="mdk-adiciona-suporte-a-invites-entre-versões-mistas-e-convergência-de-selfupdate">MDK adiciona suporte a invites entre versões mistas e convergência de SelfUpdate&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>, o &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> Development Kit, mergeou sete PRs. O fio condutor do trabalho é compatibilidade, mantendo clientes em versões ligeiramente diferentes do Marmot capazes de convidar uns aos outros, rotacionar o próprio estado e recuperar-se limpos de entradas malformadas.&lt;/p>
&lt;p>A correção principal é o &lt;a href="https://github.com/marmot-protocol/mdk/pull/261">PR #261&lt;/a>, que computa &lt;code>RequiredCapabilities&lt;/code> de um grupo como o LCD das capabilities dos convidados e desbloqueia invites entre versões mistas de &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>. O &lt;a href="https://github.com/marmot-protocol/mdk/pull/264">PR #264&lt;/a> converge o formato wire de SelfUpdate entre implementações; SelfUpdate é a mensagem de controle que um membro de grupo envia quando rotaciona seu próprio KeyPackage ou estado de capabilities, então drift ali quebra silenciosamente a auto-rotação entre clientes mesmo quando invites e welcomes ainda fazem parse. Em robustez, o &lt;a href="https://github.com/marmot-protocol/mdk/pull/262">PR #262&lt;/a> faz parse dos key packages dos convidados antes de persistir o signer do criador para que um convidado malformado não deixe estado residual, o &lt;a href="https://github.com/marmot-protocol/mdk/pull/256">PR #256&lt;/a> corrige a validação de depletion de admin no lado do receiver, e o &lt;a href="https://github.com/marmot-protocol/mdk/pull/259">PR #259&lt;/a> impede que o backend de armazenamento in-memory evite estado crítico de segurança sob pressão. O &lt;a href="https://github.com/marmot-protocol/mdk/pull/265">PR #265&lt;/a> expõe um accessor &lt;code>group_required_proposals&lt;/code> para que clientes possam inspecionar as proposals que DEVEM entrar antes de o próximo commit ser válido sem precisar mergulhar em internals do MDK.&lt;/p>
&lt;h3 id="nostter-adiciona-criptografia-nip-44-a-people-lists-bookmarks-e-mutes">nostter adiciona criptografia NIP-44 a people lists, bookmarks e mutes&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a> mergeou 10 PRs. O &lt;a href="https://github.com/SnowCait/nostter/pull/2088">PR #2088&lt;/a> adiciona criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> a mute lists, o &lt;a href="https://github.com/SnowCait/nostter/pull/2089">PR #2089&lt;/a> faz o mesmo para bookmarks e o &lt;a href="https://github.com/SnowCait/nostter/pull/2090">PR #2090&lt;/a> para people lists, migrando para longe da &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> onde aplicável. O &lt;a href="https://github.com/SnowCait/nostter/pull/2087">PR #2087&lt;/a> remove um caminho legado de migração de mutes kind-30000 agora que o fluxo criptografado kind-10000 se estabilizou.&lt;/p>
&lt;h3 id="zapcooking-lança-pontuação-nourish-e-thread-de-comentários-reutilizável">zap.cooking lança pontuação Nourish e thread de comentários reutilizável&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">zap.cooking&lt;/a>, o cliente Nostr de receitas, mergeou 20 PRs nesta semana. O principal recurso é um novo módulo de pontuação de receitas chamado Nourish, nos &lt;a href="https://github.com/zapcooking/frontend/pull/317">PR #317&lt;/a> e &lt;a href="https://github.com/zapcooking/frontend/pull/319">PR #319&lt;/a>, que avalia receitas em eixos nutricionais. Ao lado disso, uma refatoração em quatro estágios, do &lt;a href="https://github.com/zapcooking/frontend/pull/299">PR #299&lt;/a> ao &lt;a href="https://github.com/zapcooking/frontend/pull/302">PR #302&lt;/a>, extrai o módulo Comments para um &lt;code>CommentThread&lt;/code> reutilizável que pode ser inserido em qualquer view. O polimento do lado de receitas inclui scaling no &lt;a href="https://github.com/zapcooking/frontend/pull/309">PR #309&lt;/a>, um botão unificado de upload de mídia no &lt;a href="https://github.com/zapcooking/frontend/pull/307">PR #307&lt;/a> e uma aba Replies no perfil no &lt;a href="https://github.com/zapcooking/frontend/pull/310">PR #310&lt;/a>.&lt;/p>
&lt;h3 id="ridestr-extrai-coordenador-compartilhado-de-passageiros">ridestr extrai coordenador compartilhado de passageiros&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">ridestr&lt;/a>, o app descentralizado de ride-sharing, mergeou 10 PRs refatorando suas telas em Compose em componentes mais focados e extraindo a lógica de protocolo de passageiro e motorista para um módulo coordenador compartilhado &lt;code>:common&lt;/code>, no &lt;a href="https://github.com/variablefate/ridestr/pull/70">PR #70&lt;/a>. O &lt;a href="https://github.com/variablefate/ridestr/pull/60">PR #60&lt;/a> adiciona um receiver kind &lt;code>3189&lt;/code> para driver-ping no lado Roadflare do app.&lt;/p>
&lt;h3 id="blossom-rascunha-cabeçalho-bud-01-sunset-para-expiração-de-blobs">Blossom rascunha cabeçalho BUD-01 Sunset para expiração de blobs&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>, o protocolo do hzrd149 para armazenar blobs em servidores HTTP indexados por hash SHA-256, abriu o &lt;a href="https://github.com/hzrd149/blossom/pull/99">PR #99&lt;/a> para adicionar um cabeçalho &lt;code>Sunset&lt;/code> ao BUD-01. Um servidor pode usar o cabeçalho para anunciar um timestamp futuro em que deixará de servir um blob, permitindo que clientes planejem em torno de retenção limitada antes de bater em um 404. Como a proposta usa semântica padrão da &lt;a href="https://www.rfc-editor.org/rfc/rfc8594.html">RFC 8594&lt;/a> e é apenas consultiva, o servidor continua livre para manter o blob por mais tempo ou honrar a expiração declarada em base best effort.&lt;/p>
&lt;h2 id="new-projects">New Projects&lt;/h2>
&lt;h3 id="forgesworn-publica-um-kit-criptográfico-de-29-repositórios-para-nostr">Forgesworn publica um kit criptográfico de 29 repositórios para Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a> lançou 29 repositórios open source em cinco dias cobrindo assinatura, identidade, atestações, web of trust e descoberta de APIs pagas sobre Nostr.&lt;/p>
&lt;p>A stack de assinatura se ancora em &lt;a href="https://github.com/forgesworn/nsec-tree">nsec-tree&lt;/a>, um esquema determinístico de derivação de subidentidades que transforma um único segredo mestre em identidades Nostr ilimitadas e não correlacionáveis, e em &lt;a href="https://github.com/forgesworn/heartwood">Heartwood&lt;/a>, um signer remoto NIP-46 que roda em Raspberry Pi com Tor habilitado por padrão. &lt;a href="https://github.com/forgesworn/sapwood">Sapwood&lt;/a> adiciona uma UI web de gerenciamento para modelar um signer Heartwood, e &lt;a href="https://github.com/forgesworn/heartwood-esp32">heartwood-esp32&lt;/a> publica um experimento com a mesma lógica de token de assinatura em uma placa Heltec WiFi LoRa 32. &lt;a href="https://github.com/forgesworn/nsec-tree-cli">nsec-tree-cli&lt;/a> expõe os fluxos de derivação, prova e recuperação por Shamir para operação offline-first.&lt;/p>
&lt;p>Em identidade e confiança, &lt;a href="https://github.com/forgesworn/signet">Signet&lt;/a> chegou à &lt;a href="https://github.com/forgesworn/signet/releases/tag/v1.6.0">v1.6.0&lt;/a> como um protocolo descentralizado de verificação de identidade para Nostr, com pareamento por QR em que a pubkey de sessão é validada e pinada ao relay. &lt;a href="https://github.com/forgesworn/nostr-attestations">nostr-attestations&lt;/a> define um evento kind &lt;code>31000&lt;/code>, NIP-VA, para credenciais, endorsements, vouches, provenance, licensing e trust, consolidando o que hoje está espalhado por formatos ad hoc. &lt;a href="https://github.com/forgesworn/nostr-veil">nostr-veil&lt;/a> constrói uma web of trust que preserva privacidade por cima disso, com asserções NIP-85 apoiadas por &lt;a href="https://github.com/forgesworn/ring-sig">LSAG ring signatures&lt;/a> em secp256k1, de forma que um vouch possa provar membership em um grupo sem revelar qual membro o emitiu.&lt;/p>
&lt;p>O lado de monetização cobre APIs pagas via Lightning e Nostr. &lt;a href="https://github.com/forgesworn/toll-booth">toll-booth&lt;/a> é um middleware L402 para Express, Hono, Deno, Bun e Cloudflare Workers que transforma qualquer API em um toll booth Lightning em uma linha, com &lt;a href="https://github.com/forgesworn/toll-booth-dvm">toll-booth-dvm&lt;/a> expondo a API protegida como um DVM da &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a> e &lt;a href="https://github.com/forgesworn/toll-booth-announce">toll-booth-announce&lt;/a> fazendo bridge para &lt;a href="https://github.com/forgesworn/402-announce">402-announce&lt;/a>, que publica eventos parameterized replaceable kind &lt;code>31402&lt;/code> para descoberta de serviços HTTP 402 no Nostr. &lt;a href="https://github.com/forgesworn/402-indexer">402-indexer&lt;/a> é o crawler que recolhe esses anúncios. A organização também publicou uma &lt;a href="https://github.com/forgesworn/nip-drafts">coleção de 29 rascunhos de NIP&lt;/a> cobrindo coordenação de serviços, confiança, pagamentos, disputas, hierarquia de chaves, curadoria de recursos e descoberta de API paga.&lt;/p>
&lt;p>Tudo é escrito em TypeScript, sem dependências quando possível, e lançado por uma nova ferramenta bash-only chamada &lt;a href="https://github.com/forgesworn/anvil">anvil&lt;/a>, reforçada para supply chain, com attestation de builds reproduzíveis em múltiplos runners e trusted publishing por OIDC. Várias primitivas do conjunto, incluindo ring signatures, range proofs e shares de palavras por Shamir, preenchem lacunas antigas da camada de bibliotecas Nostr.&lt;/p>
&lt;h3 id="shockwallet-lança-sincronização-nativa-de-carteira-lightning-via-nostr-e-conexões-com-múltiplos-nós">ShockWallet lança sincronização nativa de carteira Lightning via Nostr e conexões com múltiplos nós&lt;/h3>
&lt;p>&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a> é uma carteira Lightning que usa Nostr como transporte para conexão com nós Lightning self-custodial. O app faz pareamento com um ou mais nós &lt;a href="https://github.com/shocknet/Lightning.Pub">Lightning.Pub&lt;/a> sobre Nostr via um &lt;code>nprofile&lt;/code>, e depois assina autorizações de pagamento end-to-end entre a carteira e o nó. A equipe lançou o &lt;a href="https://github.com/shocknet/wallet2/pull/608">PR #608&lt;/a> em 2026-04-18 com um passe de UI no dashboard de canais, acompanhado de um fluxo QR de admin invite link para novos usuários do PUB, &lt;a href="https://github.com/shocknet/wallet2/pull/606">PR #606&lt;/a>, e de uma correção de legibilidade no dashboard de métricas, &lt;a href="https://github.com/shocknet/wallet2/pull/607">PR #607&lt;/a>.&lt;/p>
&lt;p>O ShockWallet usa eventos de dados específicos de aplicação &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-78&lt;/a> para sincronização do estado da carteira entre dispositivos, de forma que a visão da carteira do usuário permaneça consistente entre navegador desktop e telefone sem um servidor centralizado de sync. Isso o coloca uma camada abaixo da &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a>: NIP-47 é a interface que um app usa para pedir a uma carteira existente que pague, enquanto o ShockWallet usa Nostr como transporte de conta e sessão da própria carteira até o nó Lightning subjacente. Ao lado da carteira, a equipe segue empurrando o &lt;a href="https://github.com/shocknet/CLINK">CLINK&lt;/a>, um protocolo de pareamento de sessão baseado em Nostr para conexões carteira-app, mantendo uma única codebase TypeScript que gera builds para web, Android e iOS.&lt;/p>
&lt;h3 id="issues-do-nostrability-migram-para-git-over-nostr-após-censura-do-github">Issues do Nostrability migram para git over Nostr após censura do GitHub&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/elsat@habla.news/nostrability/issues">Nostrability&lt;/a>, o rastreador de interoperabilidade de elsat para clientes e relays Nostr, está movendo seu fluxo de issues para git over Nostr depois que a organização Nostrability foi derrubada do GitHub e o suporte do GitHub não respondeu por duas semanas. O issue tracker migrado agora vive em GitWorkshop/ngit, onde as issues existentes foram carregadas e relatórios futuros de interoperabilidade podem permanecer em infraestrutura nativa de Nostr.&lt;/p>
&lt;h3 id="nowhere-codifica-sites-inteiros-em-fragments-de-url-e-roteia-pedidos-por-nostr">nowhere codifica sites inteiros em fragments de URL e roteia pedidos por Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/5t34k/nowhere">nowhere&lt;/a> é um novo projeto AGPL-3.0 de &lt;a href="https://github.com/5t34k">5t34k&lt;/a> que serializa um site inteiro no fragmento da URL depois de &lt;code>#&lt;/code>, comprime esse conteúdo com substituição por dicionário e DEFLATE cru e então o codifica em base64url. Como o HTTP proíbe navegadores de enviar fragments ao servidor, o host que entrega a página nunca vê o conteúdo e o próprio site nunca fica armazenado em um servidor. O projeto lança oito tipos de site, incluindo event, fundraiser, store, petition, message, drop, art e forum, e cada um pode ser assinado criptograficamente pelo criador e criptografado com senha na própria URL.&lt;/p>
&lt;p>Cinco dos oito tipos são puramente estáticos, mas store, forum e petition exigem comunicação ao vivo para pedidos, posts e assinaturas, e esse tráfego roda por relays Nostr usando chaves efêmeras com criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, então o relay armazena eventos que não consegue ler de chaves descartáveis que não consegue rastrear. Uma loja com item único cabe em cerca de 120 caracteres, o que faz de um link nowhere um QR code imprimível para uso offline via o leitor &lt;a href="https://nowhr.xyz/install">nowhr.xyz&lt;/a>. O repositório é um workspace pnpm dividido em um pacote &lt;code>codec&lt;/code>, uma biblioteca de componentes Svelte 5 &lt;code>web&lt;/code> com integração Nostr e pagamento e o app shell &lt;code>nowhr&lt;/code> em &lt;a href="https://nowhr.xyz/app">nowhr.xyz&lt;/a>.&lt;/p>
&lt;h3 id="pequenas-novas-superfícies-relaykit-e-brainstorm-search">Pequenas novas superfícies: relayk.it e Brainstorm Search&lt;/h3>
&lt;p>Dois projetos pequenos merecem menção sem um changelog pesado. &lt;a href="https://relayk.it">relayk.it&lt;/a>, construído por &lt;a href="https://nostr.com/sam@relayk.it">sam&lt;/a> da equipe Soapbox, é um cliente de descoberta de relays construído com &lt;a href="https://shakespeare.diy">Shakespeare&lt;/a> que roda inteiramente no navegador e aponta usuários para relays Nostr ativos. &lt;a href="https://brainstorm.world">Brainstorm Search&lt;/a> surge como uma UI de busca Nostr em página única focada em expor conteúdo pela rede.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>Propostas e discussões recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Open PRs and Discussions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-67/">NIP-67&lt;/a>: EOSE Completeness Hint&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>): propõe adicionar um terceiro elemento opcional à mensagem &lt;code>EOSE&lt;/code> da &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a> para que um relay sinalize se entregou todos os eventos armazenados que correspondem ao filtro. Hoje, &lt;code>EOSE&lt;/code> marca a fronteira entre histórico e tempo real, mas não diz nada sobre completude. Um cliente que pede 500 eventos a um relay limitado a 300 recebe 300 eventos e um &lt;code>EOSE&lt;/code>, sem saber se aquilo é tudo ou se o relay parou no meio. A proposta adiciona o formato &lt;code>['EOSE', '&amp;lt;sub_id&amp;gt;', 'finish']&lt;/code> quando o relay entregou tudo e mantém o formato legado de dois elementos como caso sem alegação de completude. O desenho é backward compatible, já que relays que não anunciam suporte caem na heurística atual, e clientes que conhecem o suporte podem parar de paginar assim que veem o sinal positivo.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-5D: Nostr Applets&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>): propõe um novo kind para distribuir applets interativos em Nostr. Onde a &lt;a href="https://nostrcompass.org/pt/topics/nip-5a/">NIP-5A&lt;/a> cobre sites estáticos e a &lt;a href="https://nostrcompass.org/pt/topics/nip-5c/">NIP-5C&lt;/a> cobre scrolls executáveis em WASM, a NIP-5D mira o meio-termo de applets front-end autocontidos que rodam no iframe sandboxed ou WebView de um cliente, endereçáveis por evento Nostr e atualizáveis por uma tag replaceable. Clientes passam a ter uma maneira de distribuir experiências de terceiros, como enquetes, calculadoras e mini-games, sem precisar criar um sistema completo de plugins. O PR aberto continua iterando sobre o modelo de segurança de passagem de mensagens entre applet e host.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-29: spec de subgrupos&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2319">PR #2319&lt;/a>): estende grupos baseados em relay da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> com uma hierarquia de subgrupos para que um grupo único hospede vários canais paralelos sem precisar criar grupos independentes no mesmo relay. O PR define um identificador de subgrupo que se apoia na tag &lt;code>h&lt;/code>, especifica como eventos de moderação da faixa kind &lt;code>9000&lt;/code> passam a valer para um subgrupo e esclarece como clientes devem renderizar a hierarquia. A mudança preserva o formato de uma única tag &lt;code>h&lt;/code> em mensagens simples, mantendo clientes antigos funcionais em salas com subgrupos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-29: permissões explícitas de papel em kind 39003&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2316">PR #2316&lt;/a>): define um schema explícito de permissões no evento de papéis kind &lt;code>39003&lt;/code> da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>. Cada papel passa a ser um conjunto nomeado de operações concedidas, como invite, add-user, remove-user, edit-metadata, delete-event e add-permission, com expiração opcional. Hoje, dois relays NIP-29 rodando o mesmo grupo podem discordar sobre o que um moderator pode fazer, e clientes não têm como refletir essa diferença ao usuário; o schema corrige isso.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-11: campo access_control para descoberta de relays restritos&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2318">PR #2318&lt;/a>): adiciona um objeto opcional &lt;code>access_control&lt;/code> ao Relay Information Document da &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>, listando o modo de restrição do relay, como open, invite, payment ou allowlist, e qualquer endpoint que um cliente possa usar para pedir acesso. O campo é apenas consultivo e permite que clientes e diretórios filtrem relays restritos para fora de listas públicas e mostrem aos usuários, de antemão, por que um relay se recusa a aceitar escritas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>): coberto na &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">Newsletter #18&lt;/a>. O PR continua iterando no formato do descritor de gateway de pagamentos kind &lt;code>10164&lt;/code> e no layout dos campos para regras de assinatura por faixa.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Agent Reputation Attestations, kind 30085&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2320">PR #2320&lt;/a>): propõe um evento endereçável kind &lt;code>30085&lt;/code> para atestações assinadas sobre agentes autônomos e serviços no Nostr, cobrindo confiabilidade, honest advertising e claims de resolução de disputas. Cada atestação aponta para uma pubkey alvo, carrega uma pontuação em faixa delimitada e referencia o evento de evidência que justifica a nota. A motivação é que DVMs da &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a> e outros mercados de serviço ainda não têm uma forma padrão para clientes publicarem feedback verificável que outros clientes possam filtrar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-TPLD: Transient Private Location Data&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>): continua a partir da &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-15-newsletter/">Newsletter #18&lt;/a> com mais iterações em torno do kind &lt;code>20411&lt;/code>, do formato de criptografia por destinatário com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> e da semântica da tag &lt;code>ttl&lt;/code> para retenção em relays.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>marmot-ts 0.5.0 release PR&lt;/strong> (&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/70">PR #70&lt;/a>): o PR pendente de release para &lt;code>@internet-privacy/marmot-ts@0.5.0&lt;/code> empacota as primeiras breaking changes planejadas no cliente Marmot em TypeScript. O release faz &lt;code>KeyPackageManager&lt;/code> suportar tanto eventos legados kind &lt;code>443&lt;/code> quanto os novos kind &lt;code>30443&lt;/code>, remove &lt;code>KeyPackageStore&lt;/code> e as classes de armazenamento de estado de grupo em favor da passagem de um key-value store genérico diretamente para &lt;code>KeyPackageManager&lt;/code> e &lt;code>MarmotGroup&lt;/code> e move invites e gerenciamento de grupo para &lt;code>MarmotClient.invites&lt;/code> e &lt;code>MarmotClient.groups&lt;/code>. Projetos que embutem marmot-ts diretamente terão mudanças de construtor e camada de storage para absorver o release.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-72-moderated-communities">NIP Deep Dive: NIP-72 (Moderated Communities)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/72.md">NIP-72&lt;/a> define um modelo de comunidades baseadas em tópico no Nostr em que moderadores curam uma view de leitura sobre escritas que, em si, continuam irrestritas. Diferente de grupos baseados em relay da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>, em que o relay é a autoridade tanto de membership quanto de moderação, uma comunidade NIP-72 vive em eventos Nostr comuns e qualquer relay que carregue os kinds relevantes pode servi-la. Qualquer pessoa pode publicar em uma comunidade, e apenas posts aprovados por um moderador reconhecido aparecem no feed da comunidade.&lt;/p>
&lt;p>Uma comunidade é definida por um evento endereçável kind &lt;code>34550&lt;/code> publicado por seu criador. O evento é replaceable com tag &lt;code>d&lt;/code>, então o criador pode editar os metadados ao longo do tempo sem perder a identidade da comunidade. A tag &lt;code>d&lt;/code> é o slug estável, tags &lt;code>name&lt;/code>, &lt;code>description&lt;/code>, &lt;code>image&lt;/code> e &lt;code>rules&lt;/code> carregam metadados de exibição, e uma série de tags &lt;code>p&lt;/code> com marcador &lt;code>moderator&lt;/code> lista as pubkeys cujas aprovações contam. Tags &lt;code>relay&lt;/code> opcionais com marcadores &lt;code>author&lt;/code>, &lt;code>requests&lt;/code> ou &lt;code>approvals&lt;/code> sugerem onde cada tipo de evento deve ser publicado e buscado.&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;f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788f1e2d3c4b5a69788&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;c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2&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">1745280000&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">34550&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-devs&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;name&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Devs&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 moderated community for Bitcoin protocol discussion.&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/bitcoin-devs.png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rules&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Stay on topic; cite sources.&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;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;moderator&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;a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2c3d4e5f6a7b8c9d0a1b2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;moderator&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 style="color:#e6db74">&amp;#34;author&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.moderator.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;approvals&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;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>Um usuário envia um post publicando qualquer evento comum, uma nota kind &lt;code>1&lt;/code>, um artigo long-form kind &lt;code>30023&lt;/code>, um evento de calendário kind &lt;code>31922&lt;/code> e assim por diante, e adicionando uma tag &lt;code>a&lt;/code> cujo valor é a coordenada da comunidade &lt;code>34550:&amp;lt;creator_pubkey&amp;gt;:&amp;lt;slug&amp;gt;&lt;/code>. O post é um evento Nostr totalmente válido por si só, e clientes sem suporte a NIP-72 simplesmente o veem como uma nota endereçada a uma coordenada com formato de comunidade. Clientes com conhecimento da comunidade filtram sua view para posts aprovados por um moderador reconhecido.&lt;/p>
&lt;p>A aprovação é um evento separado kind &lt;code>4549&lt;/code>, publicado por um moderador. A aprovação referencia a submissão por tag &lt;code>e&lt;/code>, o autor por tag &lt;code>p&lt;/code> e a comunidade por tag &lt;code>a&lt;/code>, além de embutir o evento de submissão stringificado no campo &lt;code>content&lt;/code> como cópia em cache. Essa cópia embutida mantém o post aprovado renderizável mesmo que o autor original apague depois o evento-fonte.&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;a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&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">1745283600&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">4549&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;34550:c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2:bitcoin-devs&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;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&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;e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5&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;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 style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;b3c4d5e6...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;e4f5a6b7...\&amp;#34;,\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Question about sighash flags\&amp;#34;,\&amp;#34;tags\&amp;#34;:[[\&amp;#34;a\&amp;#34;,\&amp;#34;34550:c3d2e1f0...:bitcoin-devs\&amp;#34;]],\&amp;#34;created_at\&amp;#34;:1745283500,\&amp;#34;sig\&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:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aa&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>O modelo de aprovação tem três propriedades úteis. Decisões de moderação são transparentes: toda aprovação é um evento Nostr assinado que qualquer um pode buscar, então um usuário cético pode auditar qual moderador aprovou qual post e em que momento. A moderação não é exclusiva: a mesma submissão pode ser aprovada por múltiplas comunidades, e um post rejeitado por uma pode ser aprovado por outra, porque a tag &lt;code>a&lt;/code> é apenas um endereço para uma view curada. A moderação é reversível na camada de leitura: se uma comunidade remove um moderador de seu evento kind &lt;code>34550&lt;/code>, aprovações anteriores desse moderador deixam de contar em clientes que respeitam a lista atual de moderadores.&lt;/p>
&lt;p>É no lado da leitura que clientes diferem. A maior parte dos clientes com suporte a comunidades renderiza o feed filtrando eventos kind &lt;code>4549&lt;/code> tagueados com a coordenada da comunidade, deduplicando pelo ID do evento subjacente e então renderizando o post embutido. Alguns clientes também buscam diretamente as submissões e usam aprovações apenas como whitelist, o que faz sentido quando aprovações estão incompletas ou stale. Alguns poucos clientes, incluindo &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> e, desde o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a> desta semana, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, expõem a fila de submissões pendentes aos moderadores como uma view separada.&lt;/p>
&lt;p>Comparadas aos grupos baseados em relay da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>, as trocas ficam claras. Comunidades NIP-72 funcionam sobre qualquer rede de relays sem suporte especial, então o caminho de escrita é portátil e a moderação é visível e passível de fork. Uma submissão é pública no momento em que é publicada, e posts não aprovados ficam ocultos na camada de renderização do cliente. Para espaços em que spam precisa ficar totalmente fora do wire, NIP-29 se encaixa melhor. Para comunidades públicas temáticas em que aprovação funciona mais como uma front page curada do que como um portão, NIP-72 se encaixa melhor.&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 zaps, uma forma de anexar pagamentos Lightning a identidades e eventos Nostr e de publicar um recibo verificável desse pagamento de volta aos relays. Um zap prova que um remetente específico pagou um valor específico a um destinatário específico por um alvo específico, e a prova pode ser lida por qualquer cliente Nostr sem confiar apenas na palavra do remetente. A spec atravessa três sistemas, LNURL, Lightning e Nostr, e fixa como eles precisam cooperar.&lt;/p>
&lt;p>O fluxo tem quatro atores. O cliente do remetente descobre o endpoint LNURL do destinatário a partir do perfil kind &lt;code>0&lt;/code>, campos &lt;code>lud06&lt;/code> ou &lt;code>lud16&lt;/code>, ou de uma tag &lt;code>zap&lt;/code> no evento que receberá o zap. Esse cliente então assina um evento de request de zap kind &lt;code>9734&lt;/code> descrevendo o pagamento pretendido e o envia ao callback LNURL do destinatário, não aos relays. Do outro lado, o servidor LNURL do destinatário valida o request, devolve uma invoice Lightning cujo description hash compromete a string do request e, depois que o remetente paga, publica um recibo de zap kind &lt;code>9735&lt;/code> no conjunto de relays pedido pelo remetente.&lt;/p>
&lt;p>Um request de zap, kind &lt;code>9734&lt;/code>, é um evento assinado que declara a intenção do pagamento. Os campos críticos são uma tag &lt;code>p&lt;/code> com a pubkey do destinatário, uma tag &lt;code>e&lt;/code> ou &lt;code>a&lt;/code> opcional identificando o evento ou conteúdo endereçável que está sendo zapeado, uma tag &lt;code>amount&lt;/code> em millisats e uma tag &lt;code>relays&lt;/code> listando onde o recibo deve ser publicado. O &lt;code>content&lt;/code> carrega uma mensagem opcional do remetente acompanhando o zap. Uma tag &lt;code>k&lt;/code> registra o kind alvo para que consumidores filtrem zaps pelo tipo de conteúdo financiado.&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;c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&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;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&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">1745280000&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">9734&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;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&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;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&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;21000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&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;wss://nos.lol&amp;#34;&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;k&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>&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;ccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbcc&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>O recibo de zap, kind &lt;code>9735&lt;/code>, é publicado pelo servidor de carteira do destinatário depois da confirmação do pagamento. Ele não é assinado pelo remetente; é assinado pelo servidor de carteira usando a &lt;code>nostrPubkey&lt;/code> anunciada pelo destinatário na response LNURL. Um recibo válido carrega o request de zap stringificado na tag &lt;code>description&lt;/code>, a invoice paga na tag &lt;code>bolt11&lt;/code> e uma tag &lt;code>preimage&lt;/code> provando que a invoice foi liquidada.&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;d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3&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;e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0&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">1745280060&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">9735&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;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&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;a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876a5b4c3d2e1f09876&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;b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;bolt11&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc210n1pj...bolt11invoicestring&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;{\&amp;#34;id\&amp;#34;:\&amp;#34;c1d2e3f4...\&amp;#34;,\&amp;#34;pubkey\&amp;#34;:\&amp;#34;a5b4c3d2...\&amp;#34;,\&amp;#34;kind\&amp;#34;:9734,\&amp;#34;content\&amp;#34;:\&amp;#34;great post\&amp;#34;,\&amp;#34;tags\&amp;#34;:[...]}&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;preimage&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef&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;ddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccdd&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>A regra de validação é onde a NIP-57 ganha suas garantias de confiança. Um cliente que exibe um recibo kind &lt;code>9735&lt;/code> como zap deve verificar quatro coisas: a assinatura do recibo corresponde à &lt;code>nostrPubkey&lt;/code> anunciada na response LNURL do destinatário, o valor da invoice &lt;code>bolt11&lt;/code> corresponde à tag &lt;code>amount&lt;/code> no request embutido, o description hash da invoice compromete a string do request de zap e a &lt;code>preimage&lt;/code> gera o &lt;code>payment_hash&lt;/code> da invoice. Um recibo que falha em qualquer uma dessas checagens é apenas uma alegação de pagamento, não uma prova. Clientes que renderizam contagens agregadas de zap sem fazer essas checagens são trivialmente falsificáveis por um atacante que publique eventos kind &lt;code>9735&lt;/code> forjados.&lt;/p>
&lt;p>Zaps privados adicionam uma camada de confidencialidade por cima. Um remetente pode criptografar o &lt;code>content&lt;/code> do request de zap para o destinatário e incluir uma tag &lt;code>anon&lt;/code> no request externo, de modo que a rede de relays veja o alvo do pagamento mas não consiga ler a nota anexada. Alguns clientes dão um passo adicional e geram um keypair efêmero novo para o próprio request, então o recibo ainda prova que um pagamento aconteceu, mas o destinatário não consegue ligá-lo à pubkey de longa duração do remetente. Esse padrão de anonymous zap é mais forte que um private zap simples, em que a mensagem fica escondida, mas a chave do remetente ainda pode ser visível ao longo do caminho do request.&lt;/p>
&lt;p>A NIP-57 também sustenta o sistema de metas de zap especificado na &lt;a href="https://nostrcompass.org/pt/topics/nip-75/">NIP-75&lt;/a>. Uma meta é um evento kind &lt;code>9041&lt;/code> que declara um valor alvo e um conjunto de relays onde recibos contam, e qualquer recibo de zap vinculado ao ID do evento da meta contribui para seu progresso. Clientes contabilizam o progresso somando os valores &lt;code>bolt11&lt;/code> validados de eventos kind &lt;code>9735&lt;/code> correspondentes. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a> do &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> nesta semana conecta metas à tela Live Activities da &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a> e renderiza um ranking de top zappers a partir desses mesmos recibos.&lt;/p>
&lt;p>Zap splits são definidos em um apêndice do NIP. Um destinatário pode publicar um perfil kind &lt;code>0&lt;/code> com múltiplas tags &lt;code>zap&lt;/code>, cada uma com um peso, para que um único pagamento de zap seja dividido entre várias pubkeys de acordo com os pesos publicados. Criadores de conteúdo, colaboradores e destinatários de taxas de plataforma podem todos ser pagos atomicamente a partir de um único request de zap assinado pelo remetente. Diversos clientes, incluindo &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> e &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a>, implementam split-paying end-to-end.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Se você está construindo algo ou tem notícias para compartilhar, mande DM no Nostr ou nos encontre em &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #18</title><link>https://nostrcompass.org/pt/newsletters/2026-04-15-newsletter/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-04-15-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> mergeia 29 PRs, incluindo suporte a Tor no desktop, uma implementação customizada em C de secp256k1 com bindings JNI, um sistema completo de chamadas WebRTC para &lt;a href="https://nostrcompass.org/pt/topics/nip-ac/">NIP-AC&lt;/a>, conformidade MLS com RFC 9420 para &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> e suporte a múltiplas carteiras NWC. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> estreia como app Android de push notifications nativo de Nostr usando eventos kind &lt;code>7741&lt;/code>. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> adiciona rede mesh Reticulum, levando eventos Nostr a LoRa sem conexão de internet. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> lança a v0.1.0 como app desktop que empacota um servidor de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> e um relay Nostr. &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> estreia com a v0.1.0 como diretório e player de rádio na internet construído sobre Nostr. &lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> inicia desenvolvimento como plataforma self-hosted de bots para chats em grupo criptografados com &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a> lança v0.5.0 até v0.5.3 com auditoria de segurança, verificação WASM em lote e um sistema de mensagens reescrito. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> redesenha seu layout de feed.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> mergeia 29 PRs, incluindo suporte a Tor no desktop, uma implementação customizada em C de secp256k1 com bindings JNI, um sistema completo de chamadas WebRTC para &lt;a href="https://nostrcompass.org/pt/topics/nip-ac/">NIP-AC&lt;/a>, conformidade MLS com RFC 9420 para &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> e suporte a múltiplas carteiras NWC. &lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> estreia como app Android de push notifications nativo de Nostr usando eventos kind &lt;code>7741&lt;/code>. &lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> adiciona rede mesh Reticulum, levando eventos Nostr a LoRa sem conexão de internet. &lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> lança a v0.1.0 como app desktop que empacota um servidor de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> e um relay Nostr. &lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> estreia com a v0.1.0 como diretório e player de rádio na internet construído sobre Nostr. &lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> inicia desenvolvimento como plataforma self-hosted de bots para chats em grupo criptografados com &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a> lança v0.5.0 até v0.5.3 com auditoria de segurança, verificação WASM em lote e um sistema de mensagens reescrito. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> redesenha seu layout de feed.&lt;/p>
&lt;h2 id="top-stories">Top Stories&lt;/h2>
&lt;h3 id="amethyst-mergeia-tor-no-desktop-secp256k1-em-c-chamadas-webrtc-e-nwc-com-múltiplas-carteiras">Amethyst mergeia Tor no desktop, secp256k1 em C, chamadas WebRTC e NWC com múltiplas carteiras&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, mergeou 29 PRs nesta semana em criptografia, networking, chamadas e infraestrutura de carteiras.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a> é a maior mudança, adicionando suporte a Tor no desktop ao embutir um daemon kmp-tor com design fail-closed. Se Tor estiver habilitado, todas as conexões com relays passam pelo processo Tor embutido, e o app se recusa a conectar se o Tor falhar ao iniciar. O roteamento com foco em privacidade agora alcança paridade entre as builds Android e desktop, com mais de 130 testes unitários cobrindo a integração Tor.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a> adiciona uma implementação customizada em C de secp256k1 com bindings JNI para verificação de assinaturas. A implementação usa decomposição GLV, codificação de pontos wNAF e SHA-256 acelerado por hardware em arquiteturas x86_64 e ARM64. O resultado é um ganho de velocidade de 2x a 3x na verificação de assinaturas Schnorr em comparação com o caminho anterior em Kotlin puro. PRs adicionais da série, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2188">PR #2188&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2195">PR #2195&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2204">PR #2204&lt;/a>, adicionam operações fused multiply-reduce, uma struct Fe4 dedicada no lugar de LongArray para armazenamento de field elements e intrinsics específicas de plataforma para um ganho estimado de 28% no Android.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a> atualiza a implementação MLS em Kotlin puro para cumprir a RFC 9420, adicionando verificações de reuse guard, additional authenticated data, derivação de amostras de ciphertext, correções no processamento de commits e thread safety para integração com o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>. Em cima do &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">trabalho de MLS em Kotlin da semana passada&lt;/a>, isso aproxima o &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a> da conformidade completa com a spec MLS.&lt;/p>
&lt;p>Uma série de PRs WebRTC, do &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2203">PR #2203&lt;/a> ao &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2211">PR #2211&lt;/a>, adiciona um sistema completo de chamadas de voz e vídeo para &lt;a href="https://nostrcompass.org/pt/topics/nip-ac/">NIP-AC&lt;/a>. A implementação cobre ICE restart para conexões interrompidas, troca de câmera em runtime, monitoramento de rede com reconexão automática, settings configuráveis de chamada, incluindo resolução, bitrate e seleção de servidor TURN, correção de foreground service para restrições em background do Android 14+ e thread safety em toda a máquina de estados de chamadas.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a> adiciona suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> com múltiplas carteiras, ou Nostr Wallet Connect. Usuários agora podem conectar várias carteiras NWC a uma única conta, ver cartões de saldo de cada uma, escolher uma carteira padrão e migrar da configuração legada de carteira única.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2189">PR #2189&lt;/a> adiciona conversão de GIF para MP4 com slider de qualidade, comprimindo um GIF de 3 MB para cerca de 159 KB em MP4. A mesma semana também trouxe sugestões de tom no composer com detecção automática de idioma e pré-computação paralela das sugestões.&lt;/p>
&lt;h3 id="nstrfy-estreia-com-push-notifications-nativas-de-nostr-para-android">nstrfy estreia com push notifications nativas de Nostr para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> estreou em 13 de abril com três releases, da &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.0.0">v1.0.0&lt;/a> à &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.2.0">v1.2.0&lt;/a>. O app é um fork do ntfy-android em que o transporte HTTP foi substituído por Nostr. Em vez de ficar fazendo polling em um servidor por push notifications, o nstrfy assina eventos kind &lt;code>7741&lt;/code> em relays configuráveis e os exibe como notificações nativas do Android.&lt;/p>
&lt;p>O modelo de notificação suporta payloads em plaintext e payloads criptografados com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>. Quando a criptografia está habilitada, o nstrfy usa &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> para assinar via &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> ou um nsec local. Assinaturas baseadas em tópico permitem configurar allowlists de remetentes por tópico com whitelist de npub, então apenas remetentes aprovados podem disparar notificações para um tópico específico. O app importa listas de relay do perfil do usuário usando &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e respeita expiração de eventos da &lt;a href="https://nostrcompass.org/pt/topics/nip-40/">NIP-40&lt;/a>. Todo o vocabulário de notificações do ntfy é suportado, incluindo tap-to-open URLs, níveis de prioridade, ícones customizados e action buttons, então a maior parte dos alerts ao estilo ntfy se traduz diretamente. A busca de usuários é movida por NIP-50 com dados de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> do brainstorm.world.&lt;/p>
&lt;p>O projeto complementar &lt;a href="https://github.com/vcavallo/nstrfy.sh">nstrfy.sh&lt;/a> oferece tanto uma CLI em bash quanto um cliente web hospedado em &lt;a href="https://nstrfy.sh">nstrfy.sh&lt;/a> para envio e escuta a partir do navegador, com suporte a signer NIP-07. O app nativo está disponível no &lt;a href="https://zapstore.dev/apps/io.nstrfy.android">Zapstore&lt;/a>.&lt;/p>
&lt;h3 id="hamstr-adiciona-reticulum-para-nostr-sobre-mesh-lora">HAMSTR adiciona Reticulum para Nostr sobre mesh LoRa&lt;/h3>
&lt;p>&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a>, o projeto que envia eventos Nostr e zaps Lightning por rádio amador, mergeou o &lt;a href="https://github.com/LibertyFarmer/hamstr/pull/10">PR #10&lt;/a> em 12 de abril, adicionando a rede mesh &lt;a href="https://reticulum.network/">Reticulum&lt;/a> como backend de transporte. Reticulum é um protocolo mesh criptográfico que roda sobre LoRa, HF, VHF/UHF, links seriais e TCP/IP. Com isso, o HAMSTR consegue retransmitir eventos Nostr por uma malha de dispositivos RNode sem infraestrutura de internet.&lt;/p>
&lt;p>Os transportes AX.25 Packet Radio e VARA HF existentes continuam disponíveis, então operadores podem escolher o link de rádio que melhor se ajusta ao seu setup. A arquitetura de servidor zero-knowledge do HAMSTR significa que o relay nunca vê chaves privadas, e sua conformidade com &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> garante que zaps Lightning offline apareçam corretamente em clientes como Amethyst e Primal. Um guia de setup para o transporte Reticulum está incluído em &lt;a href="https://github.com/LibertyFarmer/hamstr/blob/master/RETICULUM.MD">RETICULUM.MD&lt;/a>. Na mesma semana, o &lt;a href="https://github.com/LibertyFarmer/hamstr/pull/11">PR #11&lt;/a> migrou o frontend para Svelte 5 e TailwindCSS v4.&lt;/p>
&lt;h2 id="shipping-this-week">Shipping This Week&lt;/h2>
&lt;h3 id="bloom-v010-lança-servidor-blossom-self-hosted-e-relay">Bloom v0.1.0 lança servidor Blossom self-hosted e relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> lançou seu primeiro release, a &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a>, em 9 de abril. Construído com Tauri v2 e React 19, o Bloom empacota um servidor completo do protocolo &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>, de BUD-00 até BUD-10, e um relay Nostr em uma única aplicação desktop que roda em macOS, Windows e Linux, com builds Android e iOS planejadas. Usuários ganham armazenamento soberano de arquivos com endereçamento por conteúdo via SHA-256, suporte a metadados de arquivo &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> e resolução do esquema URI &lt;code>blossom://&lt;/code> sem precisar administrar infraestrutura de servidor. Dezesseis assets binários específicos de plataforma acompanham o release.&lt;/p>
&lt;h3 id="wavefunc-v010-e-v011-lançam-rádio-na-internet-sobre-nostr">WaveFunc v0.1.0 e v0.1.1 lançam rádio na internet sobre Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> lançou a &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0">v0.1.0&lt;/a> e a &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1">v0.1.1&lt;/a> em 13 de abril, estreando como diretório e player de rádio na internet baseado em Nostr. Kinds de evento customizados definem o modelo de dados: kind &lt;code>31237&lt;/code> para listagens de estações, kind &lt;code>30078&lt;/code> para listas de favoritos, kind &lt;code>1311&lt;/code> para chat ao vivo e kind &lt;code>1111&lt;/code> para comentários em estações. Um backend de relay Khatru fornece armazenamento em SQLite e full-text search com Bluge, suportando &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>.&lt;/p>
&lt;p>O WaveFunc vem com uma carteira &lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a> Cashu e suporte a nutzaps, tendo migrado de NDK para applesauce-core. A &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1">v0.1.1&lt;/a> adiciona carrosséis de gênero, popover para doações via Lightning, gerenciamento de estações para usuários autenticados e listagem no Zapstore. A build desktop em Tauri v2 ganhou integração com system tray, suporte a media keys, autostart e deep linking. Há builds para macOS, Windows, Linux e Android em &lt;a href="https://wavefunc.live">wavefunc.live&lt;/a>.&lt;/p>
&lt;h3 id="snort-lança-v050-até-v053-com-hardening-de-segurança-e-overhaul-de-performance">Snort lança v0.5.0 até v0.5.3 com hardening de segurança e overhaul de performance&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, o cliente web Nostr em React, lançou três releases da &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.0">v0.5.0&lt;/a> à &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.3">v0.5.3&lt;/a>. A v0.5.0 é a maior, trazendo uma auditoria de segurança abrangente com verificação real de assinaturas Schnorr, proteção reforçada em &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> contra mensagens forjadas de relay, melhorias na criptografia de PIN e remoção da confiança em delegação &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a> não verificada. As melhorias de desempenho incluem verificação de assinaturas em lote com WASM, rotas lazy-loaded, um carregador de perfis prioritários reescrito com batch loading e chunking e otimizações no worker relay. O release também adiciona exibição de invoice kind &lt;code>7000&lt;/code> exigindo pagamento para DVMs da &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a>. O &lt;a href="https://github.com/v0l/snort/pull/620">PR #620&lt;/a> reformulou o sistema de mensagens para performance, persistindo gift wraps no worker relay e substituindo o cálculo O(n²) da lista de chats por uma abordagem de passagem única baseada em Map.&lt;/p>
&lt;h3 id="primal-android-lança-3021-e-redesenha-o-layout-do-feed">Primal Android lança 3.0.21 e redesenha o layout do feed&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lançou a &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.21">v3.0.21&lt;/a> com correções para votos de zap em enquetes, compartilhamento multi-conta de carteira e auto-reconnect do remote signer e do serviço de carteira. Sete PRs mergeadas vieram em seguida: o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1008">PR #1008&lt;/a> unifica o layout da tela principal, o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1010">PR #1010&lt;/a> implementa um novo design de card de feed com avatares maiores e indentação do conteúdo, o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1009">PR #1009&lt;/a> adiciona suporte a vídeo e layout retrato em cards de mídia, o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1012">PR #1012&lt;/a> introduz um campo de texto compacto para quick replies e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1013">PR #1013&lt;/a> redesenha as app bars.&lt;/p>
&lt;h3 id="nostria-v3119-até-v3121-adiciona-geração-local-de-imagens-com-ai">Nostria v3.1.19 até v3.1.21 adiciona geração local de imagens com AI&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> lançou três releases da &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.19">v3.1.19&lt;/a> à &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.21">v3.1.21&lt;/a> com mais de 80 commits. A principal adição é geração local de imagens com Janus Pro usando aceleração WebGPU, permitindo que usuários gerem imagens no dispositivo sem API externa. Os releases também adicionam geração de imagens em nuvem, chat multimodal, suporte a ONNX runtime, uma biblioteca de prompts e gerenciamento de cache de AI. No lado do cliente, a atualização traz um novo sistema de diálogos, overhaul do editor de notas, melhorias em embeds de música e mudanças no fluxo de login com signer. A &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/">Newsletter #17&lt;/a> cobriu o release mobile nativo v3.1.18 com suporte a signer local.&lt;/p>
&lt;h3 id="tubestr-v103-lança-atualizações-no-feed-e-no-studio">TubeStr v1.0.3 lança atualizações no feed e no studio&lt;/h3>
&lt;p>&lt;a href="https://github.com/Tubestr/tubestr-v2">TubeStr&lt;/a>, um app privado de compartilhamento de vídeos familiares construído sobre Nostr, lançou a &lt;a href="https://github.com/Tubestr/tubestr-v2/releases/tag/v1.0.3">v1.0.3&lt;/a> em 13 de abril. O release adiciona melhorias ao feed e ao studio. O &lt;a href="https://github.com/Tubestr/tubestr-v2/pull/3">PR #3&lt;/a> reformula as telas de onboarding e o &lt;a href="https://github.com/Tubestr/tubestr-v2/pull/2">PR #2&lt;/a> corrige um erro de exportação de vídeo. O app usa NDK e MDK, o Marmot Development Kit, para compartilhamento criptografado de mídia entre familiares, com integração &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> planejada para armazenamento de mídia. O TubeStr está disponível no &lt;a href="https://zapstore.dev">Zapstore&lt;/a>.&lt;/p>
&lt;h2 id="in-development">In Development&lt;/h2>
&lt;h3 id="botburrow-começa-o-desenvolvimento-como-plataforma-de-bots-para-marmot">Botburrow começa o desenvolvimento como plataforma de bots para Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> é um novo projeto da equipe Marmot, iniciado em 3 de abril. É uma plataforma self-hosted de gerenciamento de bots em que cada bot recebe sua própria identidade Nostr, entra em chats de grupo criptografados com MLS do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> por meio de mensagens Welcome e envia e recebe mensagens end-to-end encrypted. O dashboard, construído com Rails 8.1, se comunica com um único daemon whitenoise-rs, &lt;code>wnd&lt;/code>, por um socket Unix.&lt;/p>
&lt;p>O Botburrow expõe uma camada substancial de scripts e operações: comandos, triggers e ações agendadas executam código Ruby customizado, scripts podem inspecionar perfis, membership de grupos e invites pendentes por meio do &lt;code>wnd&lt;/code>, o dashboard inclui uma live chat view para trocar mensagens com bots em grupos reais, e cada bot tem seu próprio armazenamento de arquivos para configs, dados em cache e saída gerada. Uma &lt;a href="https://github.com/marmot-protocol/botburrow/commit/2ed012078eaab3c5b92dff16b87865c2e353bd80">imagem Docker&lt;/a> com builds multi-arch mira self-hosting sem configuração em Umbrel e Start9. Uma &lt;a href="https://github.com/marmot-protocol/botburrow/commit/c8ef8c306af247560b1952878206d854cde3fe20">seção sobre trust model&lt;/a> no README documenta as fronteiras de segurança.&lt;/p>
&lt;h3 id="nostr-archives-adiciona-relay-de-feeds-em-alta-e-resolução-de-entidades">Nostr Archives adiciona relay de feeds em alta e resolução de entidades&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/nostrarchives-api">Nostr Archives&lt;/a>, a plataforma de arquivamento e analytics em &lt;a href="https://nostrarchives.com">nostrarchives.com&lt;/a>, seguiu em desenvolvimento constante em sua &lt;a href="https://github.com/barrydeen/nostrarchives-api">API&lt;/a>, em Rust, e no &lt;a href="https://github.com/barrydeen/nostrarchives-frontend">frontend&lt;/a>, em Next.js 16. Na API, o &lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/118">PR #118&lt;/a> adiciona filtragem por intervalo de tempo ao leaderboard de clientes, e o &lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/117">PR #117&lt;/a> adiciona contadores de engajamento a eventos de reply. No frontend, o &lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/85">PR #85&lt;/a> resolve entidades Nostr diretamente a partir do path da URL, para que colar um npub ou note ID na URL faça o site renderizar o conteúdo, e o &lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/86">PR #86&lt;/a> adiciona uma página de documentação da API. A plataforma roda quatro serviços de relay: um relay de busca NIP-50, um relay de feeds em alta, visível em &lt;code>wss://feeds.nostrarchives.com&lt;/code>, um scheduler relay para eventos futuros e um indexer relay para kinds 0, 3 e 10002.&lt;/p>
&lt;h3 id="damus-corrige-a-timeline-de-favoritos">Damus corrige a timeline de favoritos&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, o cliente iOS, mergeou o &lt;a href="https://github.com/damus-io/damus/pull/3708">PR #3708&lt;/a>, reescrevendo a função &lt;code>subscribe_to_favorites()&lt;/code> com filtragem in-place, reconstrução de deduplicação e seleção persistida de abas.&lt;/p>
&lt;h3 id="nostur-adiciona-private-zaps-e-visualização-de-emoji-customizado">Nostur adiciona private zaps e visualização de emoji customizado&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, o cliente iOS, publicou 10 commits nesta semana adicionando suporte a private zaps, visualização de emoji customizado, correção de renderização animada &lt;code>.webp&lt;/code> e detecção de formato de áudio em mensagens de voz.&lt;/p>
&lt;h3 id="amber-lança-v601-até-v603-com-backup-webdav-e-correções-de-reconexão-a-relays">Amber lança v6.0.1 até v6.0.3 com backup WebDAV e correções de reconexão a relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o app signer Android da &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, lançou três releases nesta semana. A &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.1">v6.0.1&lt;/a> adiciona duas novas opções de backup, WebDAV e compartilhamento para Google Drive, implementa exponential backoff para reconexões com relays, atualiza a biblioteca Quartz para 1.08.0 e corrige validação de eventos de atualização do app e de perfil. A &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.2">v6.0.2&lt;/a> adiciona uma opção de índice de conta ao usar seed words e corrige a reconexão a relay quando o relay está offline no startup. A &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.3">v6.0.3&lt;/a> adiciona uma correção extra para request IDs vazios ao receber intents.&lt;/p>
&lt;h3 id="plektos-v060-redesenha-com-temas-ditto">Plektos v0.6.0 redesenha com temas Ditto&lt;/h3>
&lt;p>&lt;a href="https://github.com/derekross/plektos">Plektos&lt;/a>, a plataforma descentralizada de meetups e eventos construída sobre &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> com mapas interativos, lançou a &lt;a href="https://github.com/derekross/plektos/commit/7a691cdf089ceb7a8582dd5c0ee026830f2cdc77">v0.6.0&lt;/a> e a &lt;a href="https://github.com/derekross/plektos/commit/3a6474ae380522d8ee1b3526423fcfc3328fd879">v0.6.1&lt;/a> em 14 de abril. A atualização adiciona temas de comunidade ao estilo Ditto com upload de imagem de fundo, configuração do formato do avatar e overhaul de UI. O &lt;a href="https://github.com/derekross/plektos/pull/6">PR #6&lt;/a> responde a uma revisão completa de código cobrindo achados de segurança, arquitetura e UX. O Plektos usa Nostrify para integração de protocolo, &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> para login remoto e zaps para pagamento de ingressos. A build Android está no Zapstore.&lt;/p>
&lt;h3 id="shadow-adiciona-nostr-os-api-e-app-de-carteira-cashu">Shadow adiciona Nostr OS API e app de carteira Cashu&lt;/h3>
&lt;p>&lt;a href="https://github.com/justinmoon/shadow">Shadow&lt;/a>, a plataforma de runtime de apps do Justin Moon, publicou mais de 30 commits em dois dias. O &lt;a href="https://github.com/justinmoon/shadow/commit/88cbda5131814d2730a2d892029932136db005df">commit 88cbda5&lt;/a> adiciona um app de carteira Cashu rodando dentro do runtime Shadow. O &lt;a href="https://github.com/justinmoon/shadow/commit/865c415">commit 865c415&lt;/a> adiciona um demo de podcast player. O runtime expõe &lt;code>Shadow.os.nostr&lt;/code> e &lt;code>Shadow.os.audio&lt;/code> como APIs de nível de sistema, e a faixa Pixel do runtime roda um compositor Wayland em dispositivos Android com root e composição por GPU. Os &lt;a href="https://github.com/justinmoon/shadow/pull/1">PR #1&lt;/a> e &lt;a href="https://github.com/justinmoon/shadow/pull/2">PR #2&lt;/a>, do colaborador k0sti, corrigem carregamento de fontes no desktop Linux e tratamento do diretório de estado XDG. Ainda não há release formal.&lt;/p>
&lt;h3 id="lief-corrige-login-com-amber-e-adiciona-zapstore">Lief corrige login com Amber e adiciona Zapstore&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/lief">Lief&lt;/a>, um app Nostr para compor e enviar cartas long-form a outros usuários Nostr, lançou a build &lt;code>v2026.04.12&lt;/code> em 12 de abril. A atualização corrige um problema de login com signer &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> no Android, simplifica o fluxo de lembrete de signer, atualiza a dependência nostrify e adiciona integração com Zapstore.&lt;/p>
&lt;h3 id="espy-reformula-o-color-picker-e-corrige-login-com-amber">Espy reformula o color picker e corrige login com Amber&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/espy">Espy&lt;/a>, um app social Nostr em que usuários compartilham color moments, capturando paletas de 3 a 6 cores de cenas reais como forma de comunicação visual pré-verbal, lançou a build &lt;code>v2026.04.12&lt;/code> em 12 de abril. A atualização reformula o color picker com um arco curvo de saturação no lugar do toggle em escala de cinza, corrige bugs de flicker no anel de matiz e adiciona personagens Easter egg, Alchemist e Astrologer. A compressão reduziu assets PNG em 703 KB. O release também corrige um problema de login com signer Amber, simplifica o fluxo de signer nudge, atualiza a dependência nostrify e adiciona integração com Zapstore.&lt;/p>
&lt;h3 id="jumble-adiciona-filtros-de-kind-por-feed-e-aba-de-artigos">Jumble adiciona filtros de kind por feed e aba de artigos&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, o cliente Nostr, publicou 13 commits nesta semana adicionando filtragem de kind por feed, uma aba Articles, sincronização de status de leitura de notificações com uma opção que preserva privacidade, um modo de ocultar avatar e correção de uma race condition na troca de conta.&lt;/p>
&lt;h3 id="primal-web-lança-8-version-bumps">Primal Web lança 8 version bumps&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-web-app">Primal Web&lt;/a> lançou versões 3.0.93 até 3.0.101 em uma semana com 21 commits. O trabalho se concentrou em melhorias no chat de live stream, correções de limites de mentions, paginação de bookmarks, prevenção de likes duplicados e correções no relay proxy.&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="nip-updates">NIP Updates&lt;/h3>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Merged:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> (Git Stuff): adiciona URLs de clone &lt;code>nostr://&lt;/code>&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>): &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> define como hospedar repositórios git no Nostr usando anúncios de repositório kind &lt;code>30617&lt;/code> que listam branches, tags, localizações de relay e pubkeys de mantenedores. Até agora, a spec não tinha um esquema formal de URL para referenciar esses repositórios. Este PR adiciona um formato de clone URL &lt;code>nostr://&lt;/code> que funciona com helpers &lt;code>git-remote-nostr&lt;/code>, então &lt;code>git clone nostr://npub1.../relay.ngit.dev/ngit&lt;/code> resolve o npub, ou endereço &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a>, descobre as localizações de relay do repositório e busca os dados do repositório. Três padrões de URL são definidos: &lt;code>nostr://&amp;lt;naddr&amp;gt;&lt;/code> para referências diretas a eventos endereçáveis, &lt;code>nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code> para referências legíveis por humanos e &lt;code>nostr://&amp;lt;npub|nip05&amp;gt;/&amp;lt;relay-hint&amp;gt;/&amp;lt;identifier&amp;gt;&lt;/code> quando o cliente precisa de um relay hint. Tanto o relay hint quanto o identifier são percent-encoded conforme a RFC 3986. O formato já é implementado por Shakespeare e pelo helper git-remote-nostr do ngit, e exibido por GitWorkshop.dev e NostrHub.io. O PR também endurece o formato da tag &lt;code>d&lt;/code> para identificadores de repositório, para que URLs &lt;code>nostr://&lt;/code> produzam URIs válidas.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Open PRs and Discussions:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-63a: Minimal Payment Gateway Descriptor&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>): propõe um novo evento replaceable kind &lt;code>10164&lt;/code> que permite a criadores de conteúdo declarar payment gateways, modelos de preço e regras de assinatura para acesso a conteúdo pago. Hoje, conteúdo pago no Nostr exige que cada cliente implemente seu próprio fluxo de pagamento, sem forma padrão de um criador dizer que o conteúdo custa X sats via gateway Y. O evento proposto embutiria descritores de gateway diretamente em eventos Nostr, permitindo que clientes descubram métodos de pagamento aceitos, faixas de preço e opções de assinatura a partir de um único evento replaceable. Isso desacopla a apresentação de pagamento de provedores específicos, de forma que um criador poderia aceitar Lightning, Cashu ou gateways fiat sem exigir integração customizada em cada cliente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX: Relay Self-Declaration Manifest and Retention Horizon&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2314">PR #2314&lt;/a>): propõe dois primitivos de wire protocol para transparência de relays. O primeiro é o kind &lt;code>10100&lt;/code>, um evento replaceable gossipable em que operadores de relay declaram seus endpoints, em clearnet, Tor e I2P, janela de retenção, política de escrita e NIPs suportados. Diferente dos Relay Information Documents da &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>, que são entregues por HTTP e não podem ser descobertos pelo próprio Nostr, manifests kind &lt;code>10100&lt;/code> se propagam pela rede de eventos Nostr como qualquer outro evento, com binding TOFU por meio do campo &lt;code>pubkey&lt;/code> da NIP-11 para evitar spoofing. O segundo primitivo é &lt;code>HORIZON&lt;/code>, uma nova mensagem relay-to-client &lt;code>['HORIZON', &amp;lt;sub_id&amp;gt;, &amp;lt;earliest_timestamp&amp;gt;]&lt;/code> enviada antes de &lt;code>EOSE&lt;/code>. Quando o intervalo temporal pedido por um cliente ultrapassa a janela de retenção do relay, o relay responde com o timestamp mais antigo que possui, trocando dead ends silenciosos por fronteiras temporais explícitas. A motivação é que o campo &lt;code>retention&lt;/code> da NIP-11 foi removido em fevereiro de 2026 por falta de uso, porque a entrega apenas por HTTP falhou em distribuição. Uma implementação de referência roda no nostr-rs-relay 0.9.0 com pruning de 90 dias.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-TPLD: Transient Private Location Data&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>): propõe o kind &lt;code>20411&lt;/code>, na faixa efêmera, para compartilhar geolocalização criptografada com destinatários específicos. Serviços centralizados de compartilhamento de localização como Google Maps e Apple Find My exigem confiar em uma autoridade central com movimentos em tempo real. Este NIP define uma alternativa privacy-first em que o conteúdo do evento contém um mapa JSON de pubkeys destinatárias para payloads criptografados com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, cada um contendo um geohash em nível de precisão configurável. Múltiplos destinatários são tratados em um único evento com criptografia por destinatário, então cada pessoa só pode descriptografar seu próprio payload. Uma tag &lt;code>ttl&lt;/code> define o time-to-live sugerido em segundos, e a faixa efêmera de kinds sinaliza a relays que esses eventos não devem ser armazenados indefinidamente. As tags &lt;code>p&lt;/code> permitem que clientes filtrem eventos relevantes sem descriptografar o conteúdo.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-5c/">NIP-5C&lt;/a> (Scrolls): atualização de programas WASM&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): continua o desenvolvimento da spec de publicação e execução de programas WebAssembly, que define convenções para publicar e descobrir binários WASM como eventos Nostr. Scrolls são programas autocontidos que clientes podem baixar de relays e executar em um runtime sandboxed, transformando o Nostr em uma rede de distribuição de código executável. O PR refina o formato do evento e a interface de runtime. Um &lt;a href="https://nprogram.netlify.app/">demo app&lt;/a> mostra scrolls rodando no navegador, com programas de exemplo publicados como eventos Nostr que qualquer cliente pode buscar e executar. O conceito estende a &lt;a href="https://nostrcompass.org/pt/topics/nip-5a/">NIP-5A&lt;/a>, sites estáticos, da entrega de páginas HTML para a execução de programas interativos, tudo distribuído pela mesma infraestrutura de relays.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Suporte a payloads grandes na &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1907">PR #1907&lt;/a>): propõe estender a criptografia versionada da NIP-44 para lidar com payloads maiores que o limite atual de 65.535 bytes. A mudança é backward compatible, então implementações que não precisam de mensagens grandes podem ignorá-la. A motivação prática é assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> de listas grandes de contatos kind &lt;code>3&lt;/code>, em que a lista de follows de um usuário pode ultrapassar o limite de tamanho quando serializada em JSON. Sem essa mudança, signers remotos não conseguem criptografar responses contendo grandes listas de contatos, forçando workarounds ou truncamento.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-c7/">NIP-C7&lt;/a>: restringe kind 9 a views de chat&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a>): &lt;a href="https://nostrcompass.org/pt/topics/nip-c7/">NIP-C7&lt;/a> define o kind &lt;code>9&lt;/code> como uma mensagem leve de chat, uma nota curta de texto destinada a conversa em tempo real em contextos de chat como grupos da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> e streams de live activities da &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a>. Este PR adiciona o requisito de que clientes que renderizam uma chat view como stream de eventos ordenados DEVEM buscar apenas eventos kind &lt;code>9&lt;/code>, evitando perda de contexto quando outros tipos de conteúdo, como notas kind &lt;code>1&lt;/code> e artigos kind &lt;code>30023&lt;/code>, se misturam à timeline do chat. Outros tipos de conteúdo ainda podem ser citados dentro de uma mensagem kind &lt;code>9&lt;/code> seguindo reposts da &lt;a href="https://nostrcompass.org/pt/topics/nip-18/">NIP-18&lt;/a>. A motivação vem de uma discussão comunitária sobre mensagens kind &lt;code>9&lt;/code> aparecendo em feeds gerais sem contexto, já que mensagens de chat costumam ser respostas curtas que só fazem sentido dentro de um thread de conversa.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-29-relay-based-groups">NIP Deep Dive: NIP-29 (Relay-based Groups)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/29.md">NIP-29&lt;/a> define um modelo de mensagens em grupo em que o próprio relay gerencia membership e moderação. Grupos vivem em um relay específico, identificados por uma string aleatória de ID, e o relay impõe quem pode escrever no grupo. Essa é uma arquitetura diferente de &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, com criptografia MLS do lado do cliente, ou de chats em grupo da &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>, com gift-wrapped DMs: na NIP-29, o relay é a autoridade, as mensagens podem ser lidas pelo operador do relay e a moderação acontece no nível do relay.&lt;/p>
&lt;p>Um grupo é identificado pelo formato &lt;code>&amp;lt;host&amp;gt;'&amp;lt;group-id&amp;gt;&lt;/code>, por exemplo &lt;code>groups.nostr.com'abcdef&lt;/code>. O ID especial &lt;code>_&lt;/code> é reservado como grupo de topo para discussão em nível de relay. Todos os eventos de usuário enviados ao grupo carregam uma tag &lt;code>h&lt;/code> com o ID do grupo:&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">1744675200&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">9&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;h&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abcdef&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;previous&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e5f67890&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12345678&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;Has anyone tested the new relay config?&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;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&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>A tag &lt;code>previous&lt;/code> funciona como mecanismo de detecção de adulteração. Clientes incluem os primeiros 8 caracteres hex dos eventos recentes vistos no mesmo relay dentro das últimas 50 mensagens. Relays rejeitam eventos com referências &lt;code>previous&lt;/code> a eventos fora do banco, o que impede replay de mensagens para uma cópia bifurcada do grupo em outro relay. Não é uma cadeia completa de custódia, mas torna rebroadcasts fora de contexto detectáveis.&lt;/p>
&lt;p>A membership é gerenciada por um conjunto de kinds de moderação na faixa &lt;code>9000-9020&lt;/code>. Um usuário entra publicando um request de entrada kind &lt;code>9021&lt;/code>, que o relay aceita ou rejeita com base em sua política:&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;f1a2b3c4d5e6f7890123456789abcdef0123456789abcdef1234567890abcdef&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">1744675200&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">9021&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;h&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abcdef&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;code&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;invite-xyz-123&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;I&amp;#39;d like to join the dev discussion 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;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&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>A tag &lt;code>code&lt;/code> opcional se vincula a invite codes criados por admins via eventos kind &lt;code>9009&lt;/code>. Um usuário sai publicando kind &lt;code>9022&lt;/code>, e o relay emite automaticamente uma remoção kind &lt;code>9001&lt;/code> em resposta. Admins podem adicionar usuários com papéis, kind &lt;code>9000&lt;/code>, remover usuários, kind &lt;code>9001&lt;/code>, editar metadados do grupo, kind &lt;code>9002&lt;/code>, e apagar eventos, kind &lt;code>9005&lt;/code>. O sistema de papéis é flexível: papéis são rótulos arbitrários, e o que cada papel pode fazer é política do relay, não algo definido pelo protocolo. O relay publica a configuração do grupo como eventos endereçáveis: kind &lt;code>39000&lt;/code> para metadados, kind &lt;code>39001&lt;/code> para lista de admins, kind &lt;code>39002&lt;/code> para lista de membros e kind &lt;code>39003&lt;/code> para papéis e capacidades.&lt;/p>
&lt;p>Grupos podem ser públicos, qualquer um lê, só membros escrevem, fechados, só membros leem e escrevem, ou totalmente abertos. As settings de visibilidade e acesso de escrita são ortogonais e controladas pelas flags &lt;code>public&lt;/code>, &lt;code>open&lt;/code>, &lt;code>visible&lt;/code> e &lt;code>unrestricted&lt;/code> no evento de edição de metadados kind &lt;code>9002&lt;/code>. Um relay pode hospedar muitos grupos simultaneamente, cada um com membership e moderação independentes.&lt;/p>
&lt;p>A spec aceita qualquer kind de evento dentro de um grupo, não apenas mensagens de chat. Artigos de formato longo da &lt;a href="https://nostrcompass.org/pt/topics/nip-23/">NIP-23&lt;/a>, eventos de calendário da &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a>, lives da &lt;a href="https://nostrcompass.org/pt/topics/nip-53/">NIP-53&lt;/a> e listagens de mercado podem carregar uma tag &lt;code>h&lt;/code> e participar do contexto do grupo. Isso faz grupos NIP-29 funcionarem mais como servidores do Discord ou workspaces do Slack, onde diferentes tipos de conteúdo coexistem no mesmo namespace.&lt;/p>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> é o cliente NIP-29 em desenvolvimento mais ativo, com salas de voz, login por email e DMs com proof-of-work adicionadas na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/">v1.7.0&lt;/a>. &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> também suporta grupos NIP-29. No lado de relay, &lt;a href="https://github.com/fiatjaf/relay29">groups.fiatjaf.com&lt;/a> é uma implementação de referência de fiatjaf. &lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a>, um cliente NIP-29 em Kotlin Multiplatform financiado pela &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-08-newsletter/">OpenSats&lt;/a>, está em desenvolvimento inicial com moderação estilo Discord e threading.&lt;/p>
&lt;p>O tradeoff contra alternativas criptografadas como &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> é explícito. Grupos NIP-29 podem ser lidos pelo operador do relay. Não há end-to-end encryption, nem forward secrecy, nem segurança pós-comprometimento. O relay é uma parte confiável para integridade de conteúdo e enforcement de membership. Em troca, o modelo oferece simplicidade: não há material de chave para gerenciar, nem sincronização de estado entre dispositivos, nem negociação MLS handshake. Um operador sobe um grupo, usuários entram e as mensagens fluem. Para comunidades públicas, canais de dev e espaços de discussão aberta, o modelo de confiança no relay combina com o caso de uso. Para mensagens privadas em que o relay não deve ler o conteúdo, NIP-17 ou Marmot são escolhas mais apropriadas.&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> define um protocolo para computação on-demand sobre Nostr. Um cliente publica um request de job, provedores de serviço competem para cumpri-lo e os resultados são entregues como eventos Nostr. A spec descreve isso como money in, data out, tratando o Nostr como um mercado para processamento de dados, em que clientes se importam com o resultado, não com quem o produziu.&lt;/p>
&lt;p>O protocolo reserva os kinds &lt;code>5000-5999&lt;/code> para requests de jobs, &lt;code>6000-6999&lt;/code> para resultados e o kind &lt;code>7000&lt;/code> para feedback. O kind do resultado é sempre 1000 acima do kind do request: um request kind &lt;code>5001&lt;/code> produz um resultado kind &lt;code>6001&lt;/code>. Abaixo está um request de job pedindo sumarização de texto:&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;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">1744675200&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">5001&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;https://example.com/article.txt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;output&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;text/plain&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&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;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;bid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;param&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lang&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;en&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;param&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;max_tokens&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;280&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;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>A tag &lt;code>i&lt;/code> especifica os dados de entrada com um marcador de tipo. Quatro tipos de entrada são definidos: &lt;code>url&lt;/code>, buscar e processar dados na URL; &lt;code>event&lt;/code>, usar um evento Nostr como entrada; &lt;code>job&lt;/code>, encadear a partir da saída de um job anterior; e &lt;code>text&lt;/code>, texto inline. A tag &lt;code>bid&lt;/code> define um pagamento máximo em millisats. A tag &lt;code>param&lt;/code> carrega parâmetros específicos do tipo de job, e a tag &lt;code>output&lt;/code> especifica o formato de resposta esperado.&lt;/p>
&lt;p>Um provedor de serviço pega o request e publica um resultado:&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;d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3&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">1744675260&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">6001&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;request&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;id\&amp;#34;:\&amp;#34;c3d4e5...\&amp;#34;,\&amp;#34;kind\&amp;#34;:5001,...}&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;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&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 style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/article.txt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;url&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;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&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;5000&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc50n1pj...&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 article discusses three protocol changes proposed for the next quarter...&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>O resultado marca o evento request original, inclui a entrada para referência, endereça a pubkey do cliente e opcionalmente inclui uma invoice Lightning na tag &lt;code>amount&lt;/code>. O cliente pode verificar que o resultado veio de um provedor específico conferindo a pubkey.&lt;/p>
&lt;p>Feedback de job, kind &lt;code>7000&lt;/code>, fornece atualizações de status enquanto um job está em andamento. Provedores podem emitir eventos de feedback com valores de status como &lt;code>payment-required&lt;/code>, &lt;code>processing&lt;/code>, &lt;code>error&lt;/code> ou &lt;code>success&lt;/code>. Isso dá visibilidade em tempo real a jobs longos:&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;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&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">1744675230&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">7000&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;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment-required&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;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&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 style="color:#e6db74">&amp;#34;p&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:#e6db74">&amp;#34;amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;5000&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;lnbc50n1pj...&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;11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff11223344556677889900aabbccddeeff&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>O encadeamento de jobs permite que saídas alimentem jobs posteriores. Um cliente pode definir o tipo de entrada como &lt;code>job&lt;/code> e referenciar o ID de evento de um job anterior. O provedor do job downstream espera o resultado upstream e então o processa. Isso cria pipelines componíveis: transcrever áudio, kind &lt;code>5002&lt;/code>, depois resumir a transcrição, kind &lt;code>5001&lt;/code>, e depois traduzir o resumo, kind &lt;code>5003&lt;/code>. Cada passo pode ser cumprido por um provedor diferente.&lt;/p>
&lt;p>Por privacidade, clientes podem criptografar as tags &lt;code>i&lt;/code> e &lt;code>param&lt;/code> usando a criptografia da &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> com a pubkey do provedor, colocando o payload criptografado no campo &lt;code>content&lt;/code> e adicionando uma tag &lt;code>encrypted&lt;/code>. Isso esconde dados de entrada e parâmetros de relays e outros provedores, embora exija que o cliente selecione um provedor específico desde o início.&lt;/p>
&lt;p>Tipos específicos de request de job são definidos em um &lt;a href="https://github.com/nostr-protocol/data-vending-machines/tree/master/kinds">repositório separado&lt;/a>. Os tipos atuais incluem geração de texto, kind &lt;code>5050&lt;/code>, sumarização, kind &lt;code>5001&lt;/code>, tradução, kind &lt;code>5002&lt;/code>, speech-to-text, kind &lt;code>5003&lt;/code>, geração de imagens, kind &lt;code>5100&lt;/code>, e recomendação de conteúdo, kind &lt;code>5300&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> adicionou exibição de invoice de pagamento obrigatório kind &lt;code>7000&lt;/code> na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/">Newsletter #17&lt;/a>, renderizando invoices Lightning diretamente no feed quando um DVM responde com exigência de pagamento. &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> tem um explorador de DVM para navegar por provedores disponíveis. Do lado dos provedores, projetos como &lt;a href="https://github.com/dtdannen/dvmdash">DVMDash&lt;/a> acompanham atividade de DVM pela rede, e vários serviços focados em AI oferecem geração de texto, criação de imagens e moderação de conteúdo por meio do protocolo NIP-90. A &lt;a href="https://nostrcompass.org/pt/topics/nip-89/">NIP-89&lt;/a>, Recommended Application Handlers, complementa a NIP-90 ao permitir que provedores publiquem suas capabilities como eventos Nostr descobríveis.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Está construindo algo ou tem notícias para compartilhar? Mande DM no Nostr ou nos encontre em &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>.&lt;/p></content:encoded></item><item><title>Nostr Compass #17</title><link>https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#amethyst-lanca-arti-tor-e-incorpora-mls-e-marmot-em-kotlin-puro">v1.08.0&lt;/a> com integração Arti Tor e uma UI de Shorts redesenhada, enquanto incorpora implementações em Kotlin puro de &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> à sua biblioteca &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a>. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nostur-v1270-adiciona-gravacao-de-video-e-respostas-privadas">v1.27.0&lt;/a> com gravação de vídeo, perfis com GIF animado e respostas privadas. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#shosho-v0150-lanca-shows-e-carrossel-vertical-de-video">v0.15.0&lt;/a> com Shows (informações personalizadas de live conectadas ao OBS) e um carrossel vertical de vídeos no estilo TikTok. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nymchat-reverte-marmot-e-lanca-chats-de-grupo-nip-17-aprimorados">reverte Marmot e lança chats de grupo NIP-17 aprimorados&lt;/a> com chaves efêmeras rotativas. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nostr-vpn-lanca-suporte-a-exit-nodes-e-empacotamento-para-umbrel">suporte a exit nodes e empacotamento para Umbrel&lt;/a> ao longo de seis releases. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> salta para a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adiciona-chaves-de-assinatura-nip-46-por-conexao">v6.0.0-pre1&lt;/a> com chaves de assinatura &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> por conexão e atualizações in-app via Zapstore. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> chega à &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanca-self-update-via-zapstore">v0.10.0-beta&lt;/a> com self-update de APK via Zapstore, e &lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> (Badges) recebe uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#atualizacoes-de-nips">migração de kind&lt;/a>. Dois deep dives de NIP cobrem &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) e &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing).&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#amethyst-lanca-arti-tor-e-incorpora-mls-e-marmot-em-kotlin-puro">v1.08.0&lt;/a> com integração Arti Tor e uma UI de Shorts redesenhada, enquanto incorpora implementações em Kotlin puro de &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> à sua biblioteca &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a>. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nostur-v1270-adiciona-gravacao-de-video-e-respostas-privadas">v1.27.0&lt;/a> com gravação de vídeo, perfis com GIF animado e respostas privadas. &lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> lança a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#shosho-v0150-lanca-shows-e-carrossel-vertical-de-video">v0.15.0&lt;/a> com Shows (informações personalizadas de live conectadas ao OBS) e um carrossel vertical de vídeos no estilo TikTok. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nymchat-reverte-marmot-e-lanca-chats-de-grupo-nip-17-aprimorados">reverte Marmot e lança chats de grupo NIP-17 aprimorados&lt;/a> com chaves efêmeras rotativas. &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#nostr-vpn-lanca-suporte-a-exit-nodes-e-empacotamento-para-umbrel">suporte a exit nodes e empacotamento para Umbrel&lt;/a> ao longo de seis releases. &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> salta para a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adiciona-chaves-de-assinatura-nip-46-por-conexao">v6.0.0-pre1&lt;/a> com chaves de assinatura &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> por conexão e atualizações in-app via Zapstore. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> chega à &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanca-self-update-via-zapstore">v0.10.0-beta&lt;/a> com self-update de APK via Zapstore, e &lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> (Badges) recebe uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#atualizacoes-de-nips">migração de kind&lt;/a>. Dois deep dives de NIP cobrem &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) e &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing).&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="amethyst-lança-arti-tor-e-incorpora-mls-e-marmot-em-kotlin-puro">Amethyst lança Arti Tor e incorpora MLS e Marmot em Kotlin puro&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, lançou quatro releases da &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3">v1.07.3&lt;/a> até a &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0">v1.08.0&lt;/a> e incorporou um grande lote de trabalho ainda não lançado à sua biblioteca &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a> (o módulo Nostr compartilhado em Kotlin Multiplatform). O release principal é a v1.08.0 &amp;ldquo;Arti Tor&amp;rdquo;, que migra a conectividade Tor do app da biblioteca Tor baseada em C para &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>, a implementação em Rust do Tor Project. A migração resolve crashes aleatórios que aconteciam com os bindings anteriores de Tor em C. Arti é o substituto de longo prazo do Tor Project para a codebase em C, escrito do zero em Rust para memory safety e async I/O.&lt;/p>
&lt;p>O release v1.07.3 redesenhou a UI de Shorts, substituindo o design paginado por feeds edge-to-edge para fotos, shorts e vídeos longos. O mesmo release migrou badges para kind &lt;code>10008&lt;/code> e bookmarks para kind &lt;code>10003&lt;/code>, alinhando-se à migração de kind de &lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#atualizacoes-de-nips">mergeada nesta semana&lt;/a>. A v1.07.4 corrigiu um problema no tratamento de secret do Nostr Wallet Connect, e a v1.07.5 corrigiu um crash no upload de imagens.&lt;/p>
&lt;p>Na branch main, mas ainda sem release com tag, a equipe escreveu uma implementação completa em Kotlin tanto de &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> quanto do protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, eliminando a necessidade de bindings nativos de bibliotecas C/Rust. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2147">PR #2147&lt;/a> adiciona a camada central de mensagens de grupo Marmot MLS, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2149">PR #2149&lt;/a> adiciona a UI de chat em grupo, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2146">PR #2146&lt;/a> adiciona processadores de mensagens de entrada e saída com um subscription manager, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2141">PR #2141&lt;/a> adiciona persistência do estado de grupo MLS e gerenciamento de rotação de KeyPackage, o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2150">PR #2150&lt;/a> adiciona uma suíte completa de testes de MLS com assinatura de GroupInfo aprimorada, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2158">PR #2158&lt;/a> adiciona rastreamento do status de publicação de KeyPackage. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2166">PR #2166&lt;/a> adiciona uma implementação secp256k1 em Kotlin puro para operações criptográficas de Nostr, substituindo a dependência da biblioteca nativa em C. Combinado com a implementação de MLS em Kotlin, &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a> pode executar assinatura Nostr e mensagens de grupo Marmot sem nenhum binding nativo, o que abre caminho para targets Kotlin Multiplatform incluindo iOS.&lt;/p>
&lt;p>A equipe também está construindo suporte a &lt;a href="https://nostrcompass.org/en/topics/nip-ac/">NIP-AC&lt;/a> (P2P Voice and Video Calls): o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a> adiciona uma suíte completa de testes para a máquina de estados de chamadas do NIP-AC, e o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a> impede que ofertas de chamada antigas sejam disparadas novamente após reiniciar o app.&lt;/p>
&lt;h3 id="nostur-v1270-adiciona-gravação-de-vídeo-e-respostas-privadas">Nostur v1.27.0 adiciona gravação de vídeo e respostas privadas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>, o cliente Nostr para iOS, lançou a &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/v1.27.0">v1.27.0&lt;/a> em 2 de abril. O release adiciona gravação de vídeo dentro do app com corte antes do upload, para que usuários possam capturar clipes curtos, ajustá-los ao tamanho desejado e publicar sem sair do cliente. O suporte a GIF animado se estende a fotos de perfil e de banner, com renderização de WebP animado adicionada também. Uma nova integração com Shortcuts permite que usuários enviem posts Nostr a partir de automações do Apple Shortcuts. O release também adiciona respostas privadas e corrige problemas de compatibilidade de DM que afetavam a entrega de mensagens entre Nostur e outros clientes.&lt;/p>
&lt;h3 id="shosho-v0150-lança-shows-e-carrossel-vertical-de-vídeo">Shosho v0.15.0 lança Shows e carrossel vertical de vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>, o app de live streaming Nostr, lançou a &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.0">v0.15.0&lt;/a> e a &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.1">v0.15.1&lt;/a> em 7 de abril. O recurso principal é Shows: streamers podem configurar informações personalizadas do show antes de entrar ao vivo e conectar seu show ao OBS ou a qualquer encoder externo. Isso separa os metadados de &amp;ldquo;o que estou transmitindo&amp;rdquo; do ato de entrar ao vivo, de modo que streamers possam preparar títulos, descrições e produtos antes de começar a transmitir. O mesmo release adiciona um carrossel vertical de vídeo no estilo TikTok para navegar por lives, clipes e replays em um feed de tela cheia, além de Quick Add para publicar clipes de vídeo e adicionar produtos diretamente de uma página de perfil. A v0.15.1 corrige um bug em que o teclado escondia o campo de entrada do chat da live.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="notedeck-v0100-beta-lança-self-update-via-zapstore">Notedeck v0.10.0-beta lança self-update via Zapstore&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop e mobile da equipe Damus, lançou a &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.1">v0.10.0-beta.1&lt;/a> e a &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 teste para self-update de APK. O &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> adiciona self-update de APK via o atualizador Nostr/Zapstore no Android, expandindo o &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">trabalho de descoberta de atualizações nativa do Nostr da Newsletter #14&lt;/a>. O fluxo de atualização descobre novos releases por meio de eventos Nostr publicados em relays, depois baixa o APK de onde quer que o desenvolvedor o hospede (GitHub releases, Blossom CDN ou outras fontes), verifica o hash SHA-256 contra o evento Nostr assinado e faz a instalação. O &lt;a href="https://github.com/damus-io/notedeck/pull/1438">PR #1438&lt;/a> corrige um bug na tela de boas-vindas em que os botões Login e CreateAccount navegavam imediatamente de volta, e o &lt;a href="https://github.com/damus-io/notedeck/pull/1424">PR #1424&lt;/a> corrige overflow de texto na visualização de sessão do Agentium AI.&lt;/p>
&lt;h3 id="amber-v600-pre1-adiciona-chaves-de-assinatura-nip-46-por-conexão">Amber v6.0.0-pre1 adiciona chaves de assinatura NIP-46 por conexão&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o app assinador &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lançou a &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.0-pre1">v6.0.0-pre1&lt;/a> em 4 de abril. A mudança mais importante é o uso de chaves de assinatura por conexão para o protocolo bunker &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Remote Signing). Em vez de usar um único par de chaves para todas as conexões bunker, o Amber agora gera uma chave distinta para cada cliente conectado. Se a conexão de um cliente for comprometida, o invasor não pode se passar pelo signer para outros clientes.&lt;/p>
&lt;p>O &lt;a href="https://github.com/greenart7c3/Amber/pull/377">PR #377&lt;/a> adiciona verificação e instalação de atualizações in-app via Zapstore, juntando-se ao &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-lanca-self-update-via-zapstore">Notedeck&lt;/a> na adoção de distribuição de apps nativa do Nostr. O &lt;a href="https://github.com/greenart7c3/Amber/pull/375">PR #375&lt;/a> trata falhas de AndroidKeyStore de forma segura ao exibir um aviso aos usuários em vez de causar crash, e o &lt;a href="https://github.com/greenart7c3/Amber/pull/371">PR #371&lt;/a> adiciona limpeza de banco de dados com limites de tamanho e truncamento de conteúdo para impedir crescimento ilimitado de armazenamento. O pre-release também carrega a whitelist de relay auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> e o login por frase de recuperação mnemônica do &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">ciclo v5.0.x coberto na semana passada&lt;/a>.&lt;/p>
&lt;h3 id="nostria-lança-app-mobile-nativo">Nostria lança app mobile nativo&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, o cliente Nostr multiplataforma mantido por SondreB, lançou um app mobile nativo para Android com oito releases da &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.11">v3.1.11&lt;/a> até a &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.18">v3.1.18&lt;/a>. A nova capacidade mais importante é o suporte nativo a signer local para signers como &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> e Aegis. Também estão disponíveis &lt;a href="https://www.nostria.app/download">instaladores desktop&lt;/a> para Linux, macOS e Windows. O &lt;a href="https://github.com/nostria-app/nostria/pull/610">PR #610&lt;/a> reduz a pressão de memória do feed com limites adaptativos em runtime e limpeza de preview URLs. A v3.1.14 corrige a integração com Brainstorm, um provedor de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a>. A v3.1.15 se concentra em melhorias de música. O novo app Android está disponível no &lt;a href="https://zapstore.dev/apps/app.nostria">Zapstore&lt;/a>.&lt;/p>
&lt;h3 id="divine-108-lança-uploads-retomáveis-e-dms">diVine 1.0.8 lança uploads retomáveis e DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, o cliente de vídeo short-form, lançou a &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.8">1.0.8&lt;/a> com 87 PRs mergeados. Uploads retomáveis permitem que criadores continuem uploads interrompidos chunk por chunk em vez de reiniciar do zero em uma conexão instável. O release adiciona configurações de qualidade de vídeo e bitrate, double-tap para curtir e melhorias em DMs. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2722">PR #2722&lt;/a> adiciona um plugin de câmera para macOS para captura de vídeo no desktop, e o &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2820">PR #2820&lt;/a> migra o sistema de notificações para uma arquitetura BLoC com enriquecimento e agrupamento. A equipe também substituiu stickers e artes de categoria gerados por AI por SVGs do 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-adiciona-desfoque-de-notas-sensíveis-e-auth-nip-42">Manent v1.3.0 adiciona desfoque de notas sensíveis e auth NIP-42&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent">Manent&lt;/a>, o app privado de notas criptografadas e armazenamento de arquivos, lançou a &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.3.0">v1.3.0&lt;/a> em 2 de abril. Usuários agora podem marcar notas como sensíveis para desfocá-las na visualização em lista, mantendo conteúdo privado oculto durante rolagens casuais. O release também adiciona suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> (Authentication of Clients to Relays), permitindo que o Manent se autentique em relays que exigem isso antes de aceitar eventos. O Manent armazena todos os dados criptografados em relays Nostr usando o par de chaves do usuário, então o suporte a NIP-42 amplia o conjunto de relays que ele pode usar para armazenamento.&lt;/p>
&lt;h3 id="wisp-v0170-até-v0173-adicionam-zaps-em-live-stream-e-backup-de-carteira">Wisp v0.17.0 até v0.17.3 adicionam zaps em live stream e backup de carteira&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, o cliente Nostr para Android, lançou seis releases da &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.2-beta">v0.16.2-beta&lt;/a> até a &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.3-beta">v0.17.3-beta&lt;/a> com 44 PRs mergeados. O release v0.17.0 adiciona prompts de segurança para backup de carteira e melhorias na UX de zap. A &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.1-beta">v0.17.1&lt;/a> adiciona visibilidade de chat de live stream entre plataformas e funcionalidade de zap em live stream. O &lt;a href="https://github.com/barrydeen/wisp/pull/423">PR #423&lt;/a> adiciona auto-search de perfis, uma animação de sucesso de zap e melhorias de status do usuário. O &lt;a href="https://github.com/barrydeen/wisp/pull/426">PR #426&lt;/a> corrige um crash por falta de memória em &lt;code>computeId&lt;/code> para eventos com listas grandes de tags. Os releases v0.16.x adicionaram autocomplete de shortcode de emoji, melhorias na UI de chat em grupo e filtragem de usuários bloqueados em todos os caminhos de notificação.&lt;/p>
&lt;h3 id="mostro-lança-deep-links-taxas-de-câmbio-do-nostr-e-uma-correção-para-pagamento-duplicado">Mostro lança deep links, taxas de câmbio do Nostr e uma correção para pagamento duplicado&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, a exchange peer-to-peer de Bitcoin construída sobre Nostr, teve atualizações tanto em seu daemon de servidor quanto em seu cliente mobile nesta semana. No lado do servidor, o &lt;a href="https://github.com/MostroP2P/mostro/pull/692">PR #692&lt;/a> impede que escritas antigas de ordens causem pagamentos duplicados, um bug que poderia fazer com que um vendedor recebesse duas vezes pela mesma negociação. O &lt;a href="https://github.com/MostroP2P/mostro/pull/693">PR #693&lt;/a> usa atualizações direcionadas para escritas de dev_fee em vez de sobrescrever a ordem inteira.&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, o cliente Flutter, lançou a &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.3">v1.2.3&lt;/a> em 3 de abril. O release trata deep links de diferentes instâncias do Mostro, para que usuários possam tocar em links que os encaminham ao servidor de exchange correto. O &lt;a href="https://github.com/MostroP2P/mobile/pull/498">PR #498&lt;/a> detecta DMs de admin e de disputa no pipeline de notificações em background, e o app agora busca taxas de câmbio via Nostr com fallback HTTP/cache. O &lt;a href="https://github.com/MostroP2P/mobile/pull/560">PR #560&lt;/a> corrige um bug de bloqueio de conexão com relay que impedia o app de alcançar relays em certas condições de rede.&lt;/p>
&lt;h3 id="unfiltered-v1012-adiciona-hashtags-e-comentários">Unfiltered v1.0.12 adiciona hashtags e comentários&lt;/h3>
&lt;p>&lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>, um cliente Nostr focado em conteúdo orientado por imagem, lançou a &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.12">v1.0.12&lt;/a>. O &lt;a href="https://github.com/dmcarrington/unfiltered/pull/69">PR #69&lt;/a> adiciona suporte a hashtag e o &lt;a href="https://github.com/dmcarrington/unfiltered/pull/72">PR #72&lt;/a> adiciona a capacidade de escrever e exibir comentários em posts. O &lt;a href="https://github.com/dmcarrington/unfiltered/pull/71">PR #71&lt;/a> corrige problemas de navegação com múltiplas imagens por post.&lt;/p>
&lt;h3 id="primal-android-lança-compartilhamento-multi-conta-de-carteira-e-auto-reconnect-do-remote-signer">Primal Android lança compartilhamento multi-conta de carteira e auto-reconnect do remote signer&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>, o cliente Nostr para Android, lançou um release em 7 de abril. A atualização adiciona compartilhamento multi-conta de carteira e menu overflow com deleção de carteira em Dev Tools. O remote signer agora faz auto-reconnect quando a conexão cai, e o serviço de carteira ganhou sua própria lógica de auto-reconnect. As correções incluem votos de zap em enquetes que não aparecem mais como Top Zaps, prevenção de crash com opção de enquete vazia, ocultação do saldo da carteira quando não existe carteira, e mapeamento do tipo WalletException para códigos de erro em respostas NWC.&lt;/p>
&lt;h3 id="titan-v010-lança-navegador-nativo-nsite-com-registro-de-nomes-no-bitcoin">Titan v0.1.0 lança navegador nativo nsite:// com registro de nomes no Bitcoin&lt;/h3>
&lt;p>&lt;a href="https://github.com/btcjt/titan">Titan&lt;/a>, um navegador desktop nativo para a web do Nostr, lançou a &lt;a href="https://github.com/btcjt/titan/releases/tag/v0.1.0">v0.1.0&lt;/a> em 7 de abril. O Titan resolve URLs &lt;code>nsite://&lt;/code> consultando nomes legíveis por humanos registrados no Bitcoin, consultando relays Nostr pelos eventos de conteúdo do site e renderizando páginas buscadas em servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>. O resultado é uma experiência de navegação web sem DNS, sem certificados TLS e sem provedores de hospedagem. Os nomes são registrados por meio de uma &lt;a href="https://npub1hmq6xuqnplk5lw0h3700cujmx5gymqn5wrn42u6432r6ntzumezqc3marw.nsite.lol/register">interface web&lt;/a> vinculada a transações de Bitcoin. O release inicial sai como um &lt;code>.dmg&lt;/code> para macOS (ARM, com suporte a Rosetta 2 para Intel) e inclui suporte a ambiente de desenvolvimento Nix.&lt;/p>
&lt;h3 id="bikel-v150-lança-serviço-foreground-nativo-para-telefones-sem-google">Bikel v1.5.0 lança serviço foreground nativo para telefones sem Google&lt;/h3>
&lt;p>&lt;a href="https://github.com/Mnpezz/bikel">Bikel&lt;/a>, um rastreador de ciclismo descentralizado que transforma trajetos em dados de infraestrutura pública usando Nostr, lançou a &lt;a href="https://github.com/Mnpezz/bikel/releases/tag/v1.5.0">v1.5.0&lt;/a> em 4 de abril. O release migra do Expo TaskManager dependente de GMS para um serviço foreground nativo customizado, garantindo rastreamento confiável de percursos em background em LineageOS, GrapheneOS e outras variantes Android sem Google. O Bikel Bot ganhou uma arquitetura dual-pocket com coleta autônoma de eCash via Cashu nutzaps. As v1.4.3 e v1.4.2 corrigem sincronização do rastreamento em background para ambientes Android não padrão, e o app adiciona toggles para pontos de mapa de bicicletários no OSM.&lt;/p>
&lt;h3 id="sprout-adiciona-suporte-a-nip-01-nip-23-e-nip-33">Sprout adiciona suporte a NIP-01, NIP-23 e NIP-33&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>, uma plataforma de comunicação da Block com um relay Nostr embutido, lançou a &lt;a href="https://github.com/block/sprout/releases/tag/desktop/v0.1.0-rc7">desktop/v0.1.0-rc7&lt;/a> em 6 de abril. Nesta semana a equipe adicionou suporte a artigos 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 parameterized replaceable &lt;a href="https://nostrcompass.org/en/topics/nip-33/">NIP-33&lt;/a> com substituição identificada por tag &lt;code>d&lt;/code>, e notas de texto kind &lt;code>1&lt;/code> e listas de follows kind &lt;code>3&lt;/code> de &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a>/&lt;a href="https://nostrcompass.org/en/topics/nip-02/">NIP-02&lt;/a>. O release também adiciona um sistema adaptativo de tema de IDE com 54 temas, polimento na UX do histórico de workflows e execuções de agentes, e uma limpeza da barra lateral de membros.&lt;/p>
&lt;h3 id="mesh-llm-v0560-lança-protocolo-distribuído-de-configuração">mesh-llm v0.56.0 lança protocolo distribuído de configuração&lt;/h3>
&lt;p>&lt;a href="https://github.com/michaelneale/mesh-llm">mesh-llm&lt;/a>, um sistema distribuído de inferência de LLM que usa pares de chaves Nostr para identidade de nó, lançou a &lt;a href="https://github.com/michaelneale/mesh-llm/releases/tag/v0.56.0">v0.56.0&lt;/a> em 7 de abril. O release adiciona um protocolo distribuído de configuração com semântica de ownership, quantização assimétrica de cache KV (chaves Q8_0 com valores Q4) para reduzir uso de memória, armazenamento em keychain do SO para keystores de identidade, streaming suave de chat com fila de mensagens, e correções para layout em tela cheia e divisão de cache KV com flash attention.&lt;/p>
&lt;h3 id="nostr-vpn-lança-suporte-a-exit-nodes-e-empacotamento-para-umbrel">Nostr VPN lança suporte a exit nodes e empacotamento para Umbrel&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>, uma VPN peer-to-peer que usa relays Nostr para sinalização e WireGuard para túneis criptografados, lançou seis releases da &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.0">v0.3.0&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.6">v0.3.6&lt;/a> nesta semana. O ciclo v0.3.x adiciona suporte a exit node no Windows e macOS, permitindo que peers roteiem tráfego de internet por outros nós da rede. A propagação de invites e aliases agora sincroniza sobre Nostr, para que usuários possam compartilhar acesso à rede sem coordenação fora de banda. Os releases adicionam empacotamento para Umbrel para deployment self-hosted, NAT punch-through usando endpoints públicos memorizados, limpeza automática de exit nodes obsoletos e uma especificação de protocolo publicada. O projeto também estabilizou o tratamento de rotas no macOS com rotas padrão auto-recuperáveis e reparo de underlay, e adicionou uma build Android via Tauri. Há builds disponíveis para macOS (Apple Silicon e Intel), Linux (AppImage e .deb), Windows e Android.&lt;/p>
&lt;h3 id="nymchat-reverte-marmot-e-lança-chats-de-grupo-nip-17-aprimorados">Nymchat reverte Marmot e lança chats de grupo NIP-17 aprimorados&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>, o cliente de chat com suporte a MLS, lançou 14 releases da &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/3.56.261">v3.56.261&lt;/a> até a &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.274">v3.58.274&lt;/a>. A mudança mais significativa é uma guinada de protocolo: a &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.57.261">v3.57.261&lt;/a> adicionou chats de grupo Marmot MLS, mas a &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.268">v3.58.268&lt;/a> reverteu de volta para &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> porque o suporte multi-device do Marmot ainda não está concluído, o que causava problemas na sincronização do estado do chat de grupo entre dispositivos. A v3.58.271 introduz chats de grupo NIP-17 aprimorados com chaves efêmeras rotativas para todas as mensagens, projetadas para impedir ataques de timing e correlação. A semana também trouxe um sistema de friends com controle granular de settings (&lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.262">v3.58.262&lt;/a>), sincronização de mensagens de chat em grupo MLS em settings criptografadas do app, e múltiplas correções de conectividade com relay.&lt;/p>
&lt;h3 id="nak-v0195-adiciona-multi-server-blossom-e-publicação-por-outbox">nak v0.19.5 adiciona multi-server Blossom e publicação por outbox&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, o toolkit de linha de comando Nostr do fiatjaf, lançou a &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.5">v0.19.5&lt;/a>. O comando &lt;code>blossom&lt;/code> agora aceita múltiplas flags &lt;code>--server&lt;/code> para fazer upload para vários servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> em uma só chamada. Um novo comando &lt;code>key&lt;/code> expande chaves parciais preenchendo com zeroes à esquerda. O comando &lt;code>event&lt;/code> ganha uma flag &lt;code>--outbox&lt;/code> para publicar eventos pelo modelo outbox, e &lt;code>fetch&lt;/code> agora sai com código de erro quando nenhum event é retornado.&lt;/p>
&lt;h2 id="em-desenvolvimento">Em desenvolvimento&lt;/h2>
&lt;h3 id="white-noise-adiciona-previews-com-thumbhash-e-bridge-de-registro-de-push">White Noise adiciona previews com thumbhash e bridge de registro de push&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, o mensageiro privado construído sobre o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, mergeou cinco PRs. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/549">PR #549&lt;/a> substitui previews de imagem com blurhash por thumbhash, um algoritmo mais novo que produz imagens placeholder mais nítidas com payload menor (normalmente abaixo de 30 bytes contra cerca de 50-100 bytes do blurhash), preservando a proporção e a distribuição de cores da imagem original. Blurhash permanece como fallback para conteúdo mais antigo. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/548">PR #548&lt;/a> atualiza whitenoise-rs e adiciona a bridge de registro de push &lt;a href="https://nostrcompass.org/pt/topics/mip-05/">MIP-05&lt;/a>, conectando ao cliente o &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">trabalho de spec de push notifications da semana passada&lt;/a>. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/493">PR #493&lt;/a> adiciona paginação baseada em cursor para mensagens de chat, substituindo a estratégia anterior de carregamento por uma abordagem guiada por scroll.&lt;/p>
&lt;h3 id="route96-adiciona-configuração-dinâmica-de-labels-e-limpeza-zero-egress">Route96 adiciona configuração dinâmica de labels e limpeza zero-egress&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, o servidor de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> do v0l, mergeou três PRs. O &lt;a href="https://github.com/v0l/route96/pull/80">PR #80&lt;/a> adiciona configuração dinâmica de modelo de labels via a admin API, permitindo que operadores troquem modelos de classificação de conteúdo sem reiniciar o servidor. O &lt;a href="https://github.com/v0l/route96/pull/82">PR #82&lt;/a> adiciona campos de configuração de labels à admin UI. O &lt;a href="https://github.com/v0l/route96/pull/79">PR #79&lt;/a> adiciona uma política de limpeza de arquivos zero-egress que remove automaticamente arquivos que nunca foram baixados, reduzindo custos de armazenamento para operadores.&lt;/p>
&lt;h3 id="snort-lança-endurecimento-de-segurança-e-invoices-de-pagamento-para-dvm">Snort lança endurecimento de segurança e invoices de pagamento para DVM&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, o cliente web, lançou dois releases nesta semana junto com uma auditoria de segurança abrangente. As correções incluem verificação de assinatura Schnorr, proteção contra falsificação de mensagens de relay em &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (impedindo que atacantes injetem requests de assinatura por relays comprometidos), melhorias na criptografia de PIN e remoção da confiança em delegação NIP-26. Os ganhos de desempenho vêm de verificação Schnorr em lote em WASM, rotas lazy-loaded, traduções pré-compiladas e eliminação da verificação dupla por event. O &lt;a href="https://github.com/v0l/snort/pull/618">PR #618&lt;/a> adiciona exibição de invoice exigindo pagamento 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 quando um DVM responde com uma exigência de pagamento, o Snort renderiza a invoice Lightning diretamente no feed.&lt;/p>
&lt;h3 id="damus-melhora-compactação-do-lmdb">Damus melhora compactação do LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, o cliente iOS, mergeou o &lt;a href="https://github.com/damus-io/damus/pull/3719">PR #3719&lt;/a> adicionando compactação automática do LMDB em um cronograma, evitando que o banco de dados local cresça sem limites ao longo do tempo. O &lt;a href="https://github.com/damus-io/damus/pull/3663">PR #3663&lt;/a> melhora o BlurOverlayView para que pareça protetor em vez de quebrado.&lt;/p>
&lt;h3 id="captains-log-adiciona-indexação-de-tags-e-sincronização-de-notas">Captain&amp;rsquo;s Log adiciona indexação de tags e sincronização de notas&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/captains-log">Captain&amp;rsquo;s Log&lt;/a> (Comet), a ferramenta Nostr-native de escrita long-form da Nodetec, mergeou quatro PRs nesta semana. O &lt;a href="https://github.com/nodetec/captains-log/pull/156">PR #156&lt;/a> adiciona indexação de tags e suporte a sync entre notas, o &lt;a href="https://github.com/nodetec/captains-log/pull/157">PR #157&lt;/a> refatora a sincronização de notas e o tratamento de tags, e o &lt;a href="https://github.com/nodetec/captains-log/pull/159">PR #159&lt;/a> corrige a sync de notas enviadas para a lixeira para que notas deletadas permaneçam deletadas entre dispositivos.&lt;/p>
&lt;h3 id="relatr-v02x-redesenha-sistema-de-plugins-com-marketplace-de-validadores-nativo-do-nostr">Relatr v0.2.x redesenha sistema de plugins com marketplace de validadores nativo do Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a>, um motor de pontuação de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> que calcula rankings de confiança com base na distância do grafo social e em validadores configuráveis, lançou a família v0.2.x com um redesenho completo do sistema de plugins. Validadores agora são escritos em Elo, uma linguagem funcional portátil de expressões bifurcada para suportar capacidades em múltiplas etapas orquestradas pelo host (consultas Nostr, buscas no grafo social, resolução NIP-05). Plugins são publicados como eventos Nostr kind &lt;code>765&lt;/code>, tornando a distribuição nativa da rede de relays. Um novo &lt;a href="https://relatr.net">plugin marketplace&lt;/a> permite que operadores descubram, instalem e ponderem validadores a partir do navegador, com um CLI (&lt;code>relo&lt;/code>) para autoria e publicação local. A arquitetura é sandboxed: plugins só podem invocar capacidades que o host fornece explicitamente, então um validador malicioso não pode escapar de seu escopo definido. Instâncias do Relatr agora podem ser gerenciadas a partir do site, com visibilidade total sobre quais plugins compõem o algoritmo de pontuação e seus pesos individuais.&lt;/p>
&lt;h3 id="shopstr-melhora-navegação-mobile-e-controle-de-acesso">Shopstr melhora navegação mobile e controle de acesso&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, o marketplace Nostr-native para compra e venda com Bitcoin, publicou 158 commits nesta semana entre seu app principal e o projeto complementar &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>. As correções incluem melhorias no layout mobile de comunidades, comportamento de fechar menus ao navegar e auto-close de dropdowns. Rotas protegidas não podem mais ser acessadas por URL direta sem login, e a lógica de correspondência de slug agora lida corretamente com múltiplas correspondências exatas.&lt;/p>
&lt;h3 id="pollerama-adiciona-notificações-busca-de-filmes-e-ui-de-avaliação">Pollerama adiciona notificações, busca de filmes e UI de avaliação&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a>, um app de enquetes, surveys e rating social construído sobre Nostr, adicionou notificações de threads, um recurso de busca de filmes e uma reformulação da UI de avaliação. O release também corrige problemas de carregamento do feed e atualiza versões de dependências.&lt;/p>
&lt;h3 id="purser-constrói-daemon-de-pagamentos-nostr-native-com-criptografia-marmot">Purser constrói daemon de pagamentos Nostr-native com criptografia Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/EthnTuttle/purser">Purser&lt;/a>, um daemon de pagamentos Nostr-native projetado como substituto do Zaprite, mergeou nove PRs nesta semana enquanto desenvolvia sua arquitetura central. O projeto usa MLS do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> via MDK para mensagens criptografadas entre merchant e customer, com Strike e Square como provedores de pagamento. Nesta semana entraram carregamento de config e catálogo, validação de schema de mensagens, a camada de comunicação MDK, implementações dos provedores Strike e Square, um polling engine, limitação anti-spam de taxa, persistência de pagamentos pendentes e o pipeline de processamento de pedidos. Todos os 99 testes agora exercitam operações reais de MLS do mdk-core depois que a equipe removeu MLS mockado em favor de criptografia real em modo local.&lt;/p>
&lt;h3 id="vector-refatora-anexos-de-dm-e-adiciona-edição-de-perfil">Vector refatora anexos de DM e adiciona edição de perfil&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, o mensageiro Nostr focado em privacidade construído com Tauri, mergeou o &lt;a href="https://github.com/VectorPrivacy/Vector/pull/55">PR #55&lt;/a> refatorando o frontend. A decriptação e o salvamento de anexos de DM foram movidos para a biblioteca vector-core, e o app agora suporta edição de perfil. A flag de cancelamento de upload foi corretamente conectada via TauriSendCallback, e callbacks não usados de preview de anexos foram removidos.&lt;/p>
&lt;h2 id="trabalho-de-protocolo-e-spec">Trabalho de Protocolo e Spec&lt;/h2>
&lt;h3 id="atualizações-de-nips">Atualizações de NIPs&lt;/h3>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> (Badges): Profile Badges passam para kind 10008, Badge Sets para kind 30008&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): Migra Profile Badges de kind &lt;code>30008&lt;/code> para kind &lt;code>10008&lt;/code> (um event replaceable, um por pubkey) e introduz kind &lt;code>30008&lt;/code> para Badge Sets. Antes, Profile Badges usavam o mesmo kind (&lt;code>30008&lt;/code>) que as definições de Badge, tornando-os eventos parameterized replaceable identificados por uma tag &lt;code>d&lt;/code>. O novo kind &lt;code>10008&lt;/code> é um event replaceable simples: um por pubkey, sem necessidade de tag &lt;code>d&lt;/code>. Clientes consultam um único event replaceable por usuário em vez de varrer eventos parameterized replaceable. O Amethyst v1.07.3 já sai com essa migração.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> (Git Stuff): adicionar follow lists relacionadas a git&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2130">PR #2130&lt;/a>): Adiciona convenções de follow lists para tracking de repositórios e issues do NIP-34. Usuários publicam conjuntos de follows kind &lt;code>30000&lt;/code> com tags &lt;code>d&lt;/code> como &lt;code>git-repos&lt;/code> ou &lt;code>git-issues&lt;/code> contendo referências de tag &lt;code>a&lt;/code> a repositórios (kind &lt;code>30617&lt;/code>) que querem acompanhar. Clientes podem se inscrever nesses conjuntos de follows para mostrar atividade de repositório no feed de um usuário, de forma semelhante a como listas de contatos kind &lt;code>3&lt;/code> funcionam para pubkeys.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs abertos e discussões:&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>): Expande o NIP-100 original (implementado pelo 0xChat) com três mudanças: migração para criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> encapsulada em gift wraps &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> para eliminar vazamentos de metadados, um workflow WebRTC especificado para configuração de chamadas de voz e vídeo (offer, answer, ICE candidates), e um modelo mesh de chamadas em grupo em que cada peer estabelece uma conexão WebRTC direta com todos os demais peers. A spec não é backwards-compatible com o NIP-100. O Amethyst já está desenvolvendo contra ela, com uma suíte de testes para a máquina de estados de chamadas (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a>) e tratamento de ofertas de chamada antigas (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a>) entrando nesta 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>): Propõe convenções para assinatura threshold &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr Threshold) no Nostr. FROST permite que um grupo de signers controle coletivamente uma identidade Nostr em que qualquer conjunto t-of-n de membros pode assinar events sem reconstruir a chave privada completa. O NIP define como coordenar rodadas de assinatura, distribuir key shares e publicar events assinados por threshold, apoiando-se no trabalho do signer Igloo do &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#igloo-signer-11">projeto 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 um protocolo &lt;code>postMessage&lt;/code> para aplicações web sandboxed (&amp;ldquo;napplets&amp;rdquo;) executadas em iframes se comunicarem com uma aplicação hospedeira (&amp;ldquo;shell&amp;rdquo;). O shell fornece ao napplet assinatura Nostr, acesso a relay e contexto do usuário por meio de uma API estruturada de mensagens, enquanto o sandbox do iframe impede acesso direto a chaves. Isso estende o modelo de hospedagem de sites estáticos de &lt;a href="https://nostrcompass.org/en/topics/nip-5a/">NIP-5A&lt;/a> em direção a aplicações interativas que podem ler e escrever events Nostr. O NIP está em desenvolvimento ativo com uma implementação 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>): Renomeado da proposta anterior NIP-A5. Define convenções para publicar e descobrir programas WebAssembly no Nostr. Binários WASM são armazenados como events Nostr, e clientes podem baixá-los e executá-los em um runtime sandboxed. Um &lt;a href="https://nprogram.netlify.app/">demo app&lt;/a> mostra scrolls executando no browser, com programas de exemplo publicados como events Nostr que qualquer cliente pode buscar e executar.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions): esclarecimentos&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a>): Torna mais precisa a linguagem da spec sobre múltiplas chaves e relays por provedor de serviço, esclarecendo como clientes devem lidar com assertions de provedores que operam em várias pubkeys ou endpoints de relay.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-24/">NIP-24&lt;/a> (Extra Metadata Fields): &lt;code>published_at&lt;/code> para events replaceable&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2300">PR #2300&lt;/a>): Generaliza a 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) para todos os events replaceable e addressable. A tag é apenas de exibição: se &lt;code>published_at&lt;/code> for igual a &lt;code>created_at&lt;/code>, clientes mostram o event como &amp;ldquo;created&amp;rdquo; naquele momento; se forem diferentes (porque o event foi atualizado), clientes podem mostrar &amp;ldquo;updated&amp;rdquo; no lugar. Isso permite que perfis kind &lt;code>0&lt;/code> exibam datas de &amp;ldquo;joined at&amp;rdquo; e que outros events replaceable preservem seu timestamp original de publicação ao longo de atualizações. Uma proposta complementar de &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2302">PR #2302&lt;/a>) adiciona a mesma tag a list events.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/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>): Adiciona kind &lt;code>21059&lt;/code> como contraparte efêmera do gift wrap kind &lt;code>1059&lt;/code> existente. Events efêmeros (kinds &lt;code>20000&lt;/code>-&lt;code>29999&lt;/code>) seguem a semântica de &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a>: relays não são obrigados a armazená-los e podem descartá-los após a entrega. Isso permite que aplicações enviem mensagens em gift wrap que desaparecem dos relays depois de entregues, reduzindo exigências de armazenamento para mensagens de alto volume e mantendo o mesmo modelo de criptografia em três camadas das DMs regulares &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="opensats-anuncia-a-décima-sexta-rodada-de-grants-para-nostr">OpenSats anuncia a décima sexta rodada de grants para Nostr&lt;/h3>
&lt;p>&lt;a href="https://opensats.org">OpenSats&lt;/a> anunciou sua &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">décima sexta rodada de grants para Nostr&lt;/a> em 8 de abril, financiando quatro grants inéditos e uma renovação. &lt;a href="https://github.com/vitorpamplona/amethyst/tree/main/desktopApp">Amethyst Desktop&lt;/a> recebe financiamento para que o contribuidor Robert Nagy construa um app desktop standalone sobre os módulos &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a> e Commons, levando o conjunto de recursos do cliente Android para interfaces orientadas a mouse com conexões persistentes a relay. &lt;a href="https://github.com/nogringo/nostr-mail">Nostr Mail&lt;/a> recebe financiamento para construir um sistema completo de email sobre Nostr usando events kind &lt;code>1301&lt;/code> encapsulados em gift wraps &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>, com um cliente Flutter e servidores bridge SMTP para compatibilidade com Gmail/Outlook. &lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a> recebe financiamento para um cliente de grupos baseado em relay &lt;a href="https://nostrcompass.org/en/topics/nip-29/">NIP-29&lt;/a> em Kotlin Multiplatform com mensagens em grupo ao estilo Discord, moderação e threads. &lt;a href="https://github.com/tami1A84/null--nostr">Nurunuru&lt;/a> recebe financiamento para construir uma versão nativa iOS do cliente Nostr japonês, modelado sobre a interface familiar do LINE, com login biométrico baseado em passkey para onboarding. HAMSTR recebeu renovação de grant (financiado pela primeira vez na &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants#hamstr">décima primeira rodada&lt;/a>).&lt;/p>
&lt;h2 id="nip-deep-dive-nip-17-private-direct-messages">NIP Deep Dive: 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 o padrão atual para mensagens diretas privadas no Nostr. Ele substitui o esquema mais antigo &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages), que vazava metadados (remetente, destinatário e timestamps ficavam todos visíveis nos relays) e usava uma construção de criptografia mais fraca. O NIP-17 combina &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) para criptografia com &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) para proteção de metadados, criando um sistema em três camadas em que relays não conseguem ver quem está falando com quem.&lt;/p>
&lt;p>O protocolo usa três kinds de event empilhados um dentro do outro. A camada mais interna é a mensagem em si, um event kind &lt;code>14&lt;/code> sem assinatura:&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>O event kind &lt;code>14&lt;/code> é deliberadamente sem assinatura (&lt;code>sig&lt;/code> vazio). A spec descreve isso como fornecendo negabilidade, mas na prática a proteção é limitada. O selo kind &lt;code>13&lt;/code> que encapsula o rumor é assinado pela chave real do remetente. Um destinatário pode mostrar o selo assinado a um terceiro, provando que o remetente se comunicou com ele, mesmo sem revelar o conteúdo da mensagem. Com provas de conhecimento zero, um destinatário pode provar o conteúdo exato da mensagem sem revelar sua própria chave privada. O rumor sem assinatura é como uma carta não assinada dentro de um envelope assinado: a assinatura do envelope liga o remetente ao conteúdo. Negabilidade real exigiria autenticação simétrica (como os HMACs do Signal), o que é incompatível com o modelo descentralizado de relay do Nostr, no qual mensagens precisam ser autoautenticáveis. Os pontos fortes reais do NIP-17 são privacidade de metadados e sigilo de conteúdo, não negabilidade.&lt;/p>
&lt;p>Essa mensagem sem assinatura é então encapsulada em um selo kind &lt;code>13&lt;/code>, que é assinado pelo remetente real e criptografado com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> para o destinatário:&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>O selo não tem tags, então mesmo que seja decriptado ele não revelaria o destinatário. O selo é assinado pela chave real do remetente, o que permite ao destinatário autenticar a mensagem verificando que a &lt;code>pubkey&lt;/code> do selo corresponde à &lt;code>pubkey&lt;/code> do kind &lt;code>14&lt;/code> interno.&lt;/p>
&lt;p>O selo então é encapsulado em um gift wrap kind &lt;code>1059&lt;/code>, assinado por uma chave aleatória descartável e endereçado ao destinatário:&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>A &lt;code>pubkey&lt;/code> do gift wrap é uma chave aleatória gerada apenas para esta mensagem, e o &lt;code>created_at&lt;/code> é randomizado em até dois dias no passado. Essa é a camada mais externa que os relays realmente veem: uma mensagem de uma pubkey desconhecida endereçada ao destinatário, com um timestamp que não reflete quando a mensagem foi de fato enviada. O timestamp randomizado protege contra análise posterior de events armazenados, mas um adversário conectado ativamente aos relays ainda pode observar quando o gift wrap apareceu pela primeira vez, então essa defesa é limitada a observadores passivos que consultam dados de relay mais tarde. Como a pubkey é aleatória e o timestamp é falso, os relays não conseguem determinar o remetente real. Para ler a mensagem, o destinatário decripta o gift wrap usando sua própria chave e a pubkey aleatória, encontra o selo dentro dele, decripta o selo usando sua própria chave e a pubkey do remetente obtida do selo, e encontra a mensagem kind &lt;code>14&lt;/code> dentro.&lt;/p>
&lt;p>O NIP-17 não fornece forward secrecy. Todas as mensagens são criptografadas usando o par de chaves estático do Nostr (via derivação de chave do NIP-44 a partir das chaves do remetente e do destinatário). Se uma chave privada for comprometida, toda mensagem passada e futura criptografada para essa chave poderá ser decriptada. Esse é um tradeoff deliberado: como a criptografia depende apenas do nsec, um usuário que faz backup do seu nsec pode recuperar todo o histórico de mensagens a partir de qualquer relay que ainda armazene os gift wraps. Protocolos como MLS (usado por &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>) fornecem forward secrecy por meio de material de chave rotativo, mas ao custo de exigir sincronização de estado e tornar impossível a recuperação histórica de mensagens após a rotação de chave.&lt;/p>
&lt;p>O NIP-17 também define kind &lt;code>15&lt;/code> para mensagens com arquivos criptografados, adicionando tags &lt;code>file-type&lt;/code>, &lt;code>encryption-algorithm&lt;/code>, &lt;code>decryption-key&lt;/code> e &lt;code>decryption-nonce&lt;/code> para que o destinatário possa decriptar um arquivo anexado que foi criptografado com AES-GCM antes do upload para um servidor Blossom. O kind &lt;code>10050&lt;/code> é usado para publicar a lista preferida de relays de DM do usuário, para que remetentes saibam onde entregar gift wraps. O conjunto de tags &lt;code>pubkey&lt;/code> + &lt;code>p&lt;/code> em uma mensagem define uma sala de chat; adicionar ou remover um participante cria uma nova sala com histórico limpo.&lt;/p>
&lt;p>As implementações cobrem a maior parte dos clientes principais. &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> usa NIP-17 para todas as mensagens um a um. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> usa NIP-17 para suas DMs com 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> e &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> implementam NIP-17 como seu protocolo principal de DM. A spec também suporta mensagens que desaparecem ao definir uma tag &lt;code>expiration&lt;/code> no gift wrap.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-46-nostr-remote-signing">NIP Deep Dive: 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 um protocolo para separar a chave privada do usuário da aplicação cliente. Em vez de colar um nsec em um app web, o usuário roda um signer remoto (também chamado de &amp;ldquo;bunker&amp;rdquo;) que mantém a chave privada e responde a requests de assinatura por relays Nostr. O cliente nunca vê a chave privada. Isso reduz a superfície de ataque: um cliente comprometido pode solicitar assinaturas, mas não consegue extrair a chave em si.&lt;/p>
&lt;p>O protocolo usa kind &lt;code>24133&lt;/code> tanto para requests quanto para responses, criptografados com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads). Um cliente gera um &lt;code>client-keypair&lt;/code> descartável para a sessão e se comunica com o signer remoto por mensagens criptografadas em NIP-44 marcadas com as pubkeys um do outro. Aqui está um request de assinatura de um cliente para um signer 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>O &lt;code>content&lt;/code> criptografado contém uma estrutura semelhante 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>O signer remoto decripta o request, o apresenta ao usuário para aprovação (ou aprova automaticamente com base nas permissões configuradas), assina o event com a chave privada do usuário e devolve o event assinado em uma response:&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>Conexões podem ser iniciadas de qualquer lado. Um signer remoto fornece uma URL &lt;code>bunker://&lt;/code> contendo sua pubkey e informações de relay. Um cliente fornece uma URL &lt;code>nostrconnect://&lt;/code> com sua pubkey de cliente, relays e um secret para verificação da conexão. O parâmetro &lt;code>secret&lt;/code> impede connection spoofing: apenas a parte que recebeu a URL fora de banda pode completar o handshake.&lt;/p>
&lt;p>Oito métodos são definidos: &lt;code>connect&lt;/code> para estabelecer a sessão, &lt;code>sign_event&lt;/code> para assinar events, &lt;code>get_public_key&lt;/code> para obter a pubkey do usuário, &lt;code>ping&lt;/code> para keepalive, &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> para criptografia legada, &lt;code>nip44_encrypt&lt;/code>/&lt;code>nip44_decrypt&lt;/code> para criptografia atual, e &lt;code>switch_relays&lt;/code> para gerenciamento de relay. A migração de relay é tratada pelo signer remoto, que pode mover a conexão para novos relays ao longo do tempo sem quebrar a sessão.&lt;/p>
&lt;p>Clientes solicitam capacidades específicas no momento da conexão por meio de um sistema de permissões. Uma string de permissão como &lt;code>nip44_encrypt,sign_event:1,sign_event:14&lt;/code> solicita acesso à criptografia NIP-44 e acesso de assinatura apenas para events kind &lt;code>1&lt;/code> e kind &lt;code>14&lt;/code>. O signer remoto pode aceitar, rejeitar ou modificar essas permissões. Isso significa que um cliente web para ler e publicar notas talvez receba apenas permissão &lt;code>sign_event:1&lt;/code>, enquanto um cliente de DM pode também receber permissões &lt;code>sign_event:14&lt;/code> e &lt;code>nip44_encrypt&lt;/code>.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> implementa NIP-46 no Android, e sua &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-08-newsletter/#amber-v600-pre1-adiciona-chaves-de-assinatura-nip-46-por-conexao">v6.0.0-pre1&lt;/a> nesta semana adiciona chaves de assinatura por conexão para isolamento entre clientes. &lt;a href="https://github.com/nicktee/nsecapp">nsec.app&lt;/a> (antigo Nostr Connect) fornece um bunker baseado na web. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> inclui &lt;code>BunkerSigner&lt;/code> para clientes JavaScript, e &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">o PR #530 da semana passada&lt;/a> adicionou &lt;code>skipSwitchRelays&lt;/code> para gerenciamento manual de relay. O protocolo também suporta auth challenges: quando um signer remoto precisa de autenticação adicional (senha, biometria ou token de hardware), ele responde com uma &lt;code>auth_url&lt;/code> que o cliente abre no browser para que o usuário conclua o processo.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo por esta semana. Está construindo algo ou tem novidades para compartilhar? Envie uma DM para nós no Nostr ou nos encontre em &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/pt/newsletters/2026-04-01-newsletter/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amethyst-lan%c3%a7a-notas-fixadas-gerenciamento-de-relay-e-request-to-vanish">v1.07.0&lt;/a> com notas fixadas, gerenciamento de relay via &lt;a href="https://nostrcompass.org/pt/topics/nip-86/">NIP-86&lt;/a> e suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> Request to Vanish. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nip-5a-%c3%a9-mergeado-trazendo-sites-est%c3%a1ticos-para-o-nostr">NIP-5A&lt;/a> (Static Websites) é mergeado no repositório de NIPs, definindo como hospedar sites sob pares de chaves Nostr usando armazenamento &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#flotilla-v170-adiciona-salas-de-voz-e-login-por-email">v1.7.0&lt;/a> com salas de voz, login com email e senha e DMs com proof-of-work. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> corrige churn de relays na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-e-expande-controles-do-cliente">v2026.3.23&lt;/a>, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> lança sua &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nospeak-%c3%a9-lan%c3%a7ado-como-um-mensageiro-privado-10">1.0.0&lt;/a> como mensageiro criptografado sem cadastro. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nymchat-lan%c3%a7a-chats-de-grupo-impulsionados-por-marmot">adota Marmot&lt;/a> para chats de grupo criptografados com MLS com fallback para NIP-17. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> chega à &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> com listas privadas de calendário e importação ICS, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> adiciona &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amber-v502-at%c3%a9-v504">recuperação por mnemônica e whitelist de relay auth NIP-42&lt;/a>, e a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#marmot-move-keypackages-para-eventos-endere%c3%a7%c3%a1veis-e-refor%c3%a7a-push-notifications">spec Marmot&lt;/a> move KeyPackages para eventos endereçáveis enquanto reforça o formato de push notifications MIP-05.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amethyst-lan%c3%a7a-notas-fixadas-gerenciamento-de-relay-e-request-to-vanish">v1.07.0&lt;/a> com notas fixadas, gerenciamento de relay via &lt;a href="https://nostrcompass.org/pt/topics/nip-86/">NIP-86&lt;/a> e suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> Request to Vanish. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nip-5a-%c3%a9-mergeado-trazendo-sites-est%c3%a1ticos-para-o-nostr">NIP-5A&lt;/a> (Static Websites) é mergeado no repositório de NIPs, definindo como hospedar sites sob pares de chaves Nostr usando armazenamento &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>. &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#flotilla-v170-adiciona-salas-de-voz-e-login-por-email">v1.7.0&lt;/a> com salas de voz, login com email e senha e DMs com proof-of-work. &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> corrige churn de relays na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-e-expande-controles-do-cliente">v2026.3.23&lt;/a>, &lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> lança sua &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nospeak-%c3%a9-lan%c3%a7ado-como-um-mensageiro-privado-10">1.0.0&lt;/a> como mensageiro criptografado sem cadastro. &lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nymchat-lan%c3%a7a-chats-de-grupo-impulsionados-por-marmot">adota Marmot&lt;/a> para chats de grupo criptografados com MLS com fallback para NIP-17. &lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> chega à &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> com listas privadas de calendário e importação ICS, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> adiciona &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amber-v502-at%c3%a9-v504">recuperação por mnemônica e whitelist de relay auth NIP-42&lt;/a>, e a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#marmot-move-keypackages-para-eventos-endere%c3%a7%c3%a1veis-e-refor%c3%a7a-push-notifications">spec Marmot&lt;/a> move KeyPackages para eventos endereçáveis enquanto reforça o formato de push notifications MIP-05.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="amethyst-lança-notas-fixadas-gerenciamento-de-relay-e-request-to-vanish">Amethyst lança notas fixadas, gerenciamento de relay e Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, lançou seis releases em três dias, da &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0">v1.07.0&lt;/a> até a &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5">v1.07.5&lt;/a>. O conjunto principal de recursos cobre seis superfícies de protocolo: notas fixadas, uma tela dedicada de feed de enquetes, suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) para solicitar exclusão completa de eventos dos relays, &lt;a href="https://nostrcompass.org/pt/topics/nip-86/">NIP-86&lt;/a> (Relay Management API) de dentro do cliente, avaliações &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring) na tela de informações de relay, e exibição de informações de membros &lt;a href="https://nostrcompass.org/pt/topics/nip-43/">NIP-43&lt;/a> (Relay Access Metadata and Requests).&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-86/">NIP-86&lt;/a> define uma interface JSON-RPC para operadores de relay, permitindo que clientes enviem comandos administrativos como banir pubkeys, permitir pubkeys e listar usuários banidos por uma API padronizada. O Amethyst agora expõe isso diretamente em sua UI de gerenciamento de relay, para que usuários que rodam seus próprios relays possam administrá-los a partir do mesmo cliente que usam para postar. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2039">PR #2039&lt;/a> substitui o antigo diálogo de entrada em hex para pubkeys de ban e allow por um diálogo interativo de busca de usuários.&lt;/p>
&lt;p>A v1.07.2 adicionou uploads pelo teclado de GIF e corrigiu uma regressão de assinatura em que respostas de rejeição do Amber estavam sendo interpretadas incorretamente porque versões antigas do Amber retornavam uma string vazia para o campo &lt;code>rejected&lt;/code> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2042">PR #2042&lt;/a>). A v1.07.5 corrige um crash ao fazer upload de imagem. As releases &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.2">v1.06.2&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.3">v1.06.3&lt;/a>, mais cedo na mesma semana, adicionaram um seletor de tipo de enquete para escolha única versus múltipla, drag-to-seek em barras de progresso de vídeo e melhorias em postagem anônima.&lt;/p>
&lt;h3 id="nip-5a-é-mergeado-trazendo-sites-estáticos-para-o-nostr">NIP-5A é mergeado, trazendo sites estáticos para o Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> (Static Websites) foi mergeado via &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>, definindo como hospedar sites estáticos sob pares de chaves Nostr. A spec usa dois kinds de evento: kind &lt;code>15128&lt;/code> para um site raiz, um por pubkey, e kind &lt;code>35128&lt;/code> para sites nomeados identificados por uma tag &lt;code>d&lt;/code>. Cada manifesto mapeia caminhos de URL para hashes SHA256, com tags opcionais &lt;code>server&lt;/code> apontando para hosts de armazenamento &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> onde os arquivos reais vivem.&lt;/p>
&lt;p>O modelo de hospedagem funciona assim: o autor de um site constrói um site estático, faz upload dos arquivos para um ou mais servidores Blossom e então publica um evento de manifesto assinado que mapeia caminhos para hashes de conteúdo. Um servidor host recebe requisições web, resolve a pubkey do autor a partir do subdomínio, busca o manifesto na lista de relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> do autor e serve os arquivos baixando os blobs correspondentes do Blossom. O site permanece sob controle do autor porque apenas aquela chave pode assinar um manifesto atualizado. O servidor host é substituível porque qualquer servidor que entenda NIP-5A pode servir o mesmo site a partir do mesmo manifesto.&lt;/p>
&lt;p>A spec se apoia em infraestrutura que já existe. &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>, a implementação de referência do host NIP-5A construída por lez, e &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>, a UI de gerenciamento do hzrd149, já estavam em funcionamento antes do merge do NIP. O merge torna oficiais os kinds de evento e as regras de resolução de URL, dando às segundas e terceiras implementações um alvo estável.&lt;/p>
&lt;h3 id="white-noise-corrige-churn-de-relays-e-expande-controles-do-cliente">White Noise corrige churn de relays e expande controles do cliente&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, o mensageiro privado construído sobre o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, lançou &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.3.23">v2026.3.23&lt;/a> em 25 de março. O trabalho principal é estabilidade de relay. O login não espera mais que toda publicação de lista de relays termine antes de avançar, porque a publicação agora usa lógica de quórum e tenta o restante em background. Fetches e publishes pontuais usam sessões efêmeras com escopo de relay em vez de permanecer no pool de longa duração, sessões restauradas recuperam seu caminho de refresh de grupo após o startup, e o app agora expõe diagnósticos de relay e inspeção de estado de relay via &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/495">PR #495&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/502">PR #502&lt;/a>.&lt;/p>
&lt;p>O mesmo release muda o comportamento das conversas. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/468">PR #468&lt;/a> adiciona threading de respostas NIP-C7 com tags &lt;code>q&lt;/code> e referências &lt;code>nostr:nevent&lt;/code>, os &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/471">PR #471&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/512">PR #512&lt;/a> mantêm mensagens deletadas visíveis como placeholders de exclusão em vez de removê-las silenciosamente, o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/478">PR #478&lt;/a> adiciona um fluxo in-app de bug report usando relatórios anônimos &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads), e o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/486">PR #486&lt;/a> adiciona chat de suporte diretamente no cliente. Controles de mensagens voltados ao usuário também chegaram na mesma janela: o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/532">PR #532&lt;/a> arquiva chats, o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/541">PR #541&lt;/a> adiciona mute e unmute com durações configuráveis, e o &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/535">PR #535&lt;/a> adiciona configurações de notificação. O &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/539">PR #539&lt;/a> é trabalho preparatório para registro de push, conectando registro APNs no iOS e detecção de Play Services no Android para que o registro seja construído sobre isso. No backend, o &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> (Marmot Development Kit) adicionou primitivas de push notification MIP-05 e um builder de notification request (&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>), enquanto &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> adicionou persistência de registro de push notification (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/688">PR #688&lt;/a>), correções de cancelamento de tarefas em background (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/696">PR #696&lt;/a>) e recuperação de key package no startup (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/693">PR #693&lt;/a>).&lt;/p>
&lt;h3 id="nostr-vpn-chega-à-v030-com-roster-sync-e-invite-v2">Nostr VPN chega à v0.3.0 com roster sync e invite v2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostr-vpn-%C3%A9-lan%C3%A7ado-como-alternativa-ao-tailscale">Seguindo a cobertura do lançamento da semana passada&lt;/a>, &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>, a VPN peer-to-peer que usa relays Nostr para sinalização e WireGuard para túneis criptografados, continuou seu ritmo rápido de releases, lançando versões até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.3">v0.3.3&lt;/a>. O bump de versão traz duas mudanças incompatíveis: o formato de invite muda para v2 (a 0.3.0 ainda consegue importar invites v1, mas builds antigos não conseguem importar invites v2), e um roster sync assinado por admin foi adicionado ao protocolo de sinalização. Pares em versões misturadas ainda conseguem conectar-se na camada mesh, mas peers antigos não participam da sincronização de roster.&lt;/p>
&lt;p>A adição de roster sync inicia o movimento em direção a uma rede gerenciada. Um nó admin agora pode enviar mudanças de associação a todos os peers, de modo que adicionar ou remover um dispositivo da mesh não exige que cada peer atualize manualmente sua configuração. As releases v0.2.x da mesma semana trataram problemas específicos de deployment: da &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.22">v0.2.22&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.28">v0.2.28&lt;/a> corrigiram gerenciamento de serviço no Windows, adicionaram scripts de build para Android e refinaram o fluxo de LAN pairing.&lt;/p>
&lt;h3 id="nospeak-é-lançado-como-um-mensageiro-privado-10">nospeak é lançado como um mensageiro privado 1.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>, um mensageiro privado construído sobre Nostr, lançou sua &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.0.0">1.0.0&lt;/a> em 27 de março. O projeto inclui conversas um a um e em grupo, gerenciamento de contatos e uma arquitetura self-hostable. Chats um a um usam &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), que combina &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) para esconder o remetente dos relays. Para mídia, arquivos são criptografados do lado do cliente com AES-256-GCM antes do upload para servidores Blossom. O release também é distribuído como imagem de container para self-hosting.&lt;/p>
&lt;h3 id="flotilla-v170-adiciona-salas-de-voz-e-login-por-email">Flotilla v1.7.0 adiciona salas de voz e login por email&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>, o cliente estilo Discord do hodlbod baseado em &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> (Relay-based Groups) construído em torno do modelo &amp;ldquo;relays as groups&amp;rdquo;, lançou &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">v1.7.0&lt;/a> e &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.1">v1.7.1&lt;/a> em 30 e 31 de março. O principal recurso são salas de voz, contribuídas por mplorentz. Usuários agora podem entrar em chamadas de voz dentro de canais de grupo, com um diálogo de entrada (&lt;a href="https://gitea.coracle.social/coracle/flotilla/pulls/109">PR #109&lt;/a>) que permite selecionar um dispositivo de entrada de áudio e escolher entre entrar na chamada de voz ou apenas visualizar o chat de texto. O diálogo resolve um problema de UX da iteração anterior: entrar em uma sala com voz antes forçava a ativação do microfone mesmo quando o usuário queria apenas ler mensagens ou verificar configurações da sala.&lt;/p>
&lt;p>O mesmo release adiciona login com email e senha como alternativa à autenticação baseada em chave Nostr, proof-of-work em DMs, edição de DMs, onboarding e settings de relay redesenhados, detecção de suporte a Blossom via &lt;code>supported_nips&lt;/code>, badges de notificação melhorados, fallback de push notification no Android e correções de upload de arquivos no Android. A v1.7.1 vem em seguida com uma correção para fallback de registro pomade ao usar um signer offline.&lt;/p>
&lt;p>Hodlbod também está construindo &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>, um gerenciador de hospedagem e dashboard para relays zooid, que registrou 40 commits nesta semana em desenvolvimento inicial.&lt;/p>
&lt;h3 id="nymchat-lança-chats-de-grupo-impulsionados-por-marmot">Nymchat lança chats de grupo impulsionados por Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> (também conhecido como NYM, Nostr Ynstant Messenger), o cliente de chat efêmero com bridge para Bitchat, anunciou que todos os novos chats de grupo agora usam o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> para mensagens criptografadas com MLS. A integração usa kinds &lt;code>443&lt;/code>, &lt;code>444&lt;/code> e &lt;code>445&lt;/code> para key packages, mensagens de welcome e mensagens de grupo, respectivamente, fornecendo forward secrecy, segurança pós-comprometimento e zero vazamento de metadados. Se um destinatário não puder usar MLS, o Nymchat faz fallback para seu caminho anterior de chat em grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), que ainda é end-to-end encrypted, mas não tem as propriedades de ratchet-tree do MLS.&lt;/p>
&lt;p>As séries v3.55 e v3.56 desta semana se concentraram em casos de borda de chat em grupo: carregamento em novos dispositivos, comportamento de saída, roteamento de notificações e contagens de badge de não lidos. O mesmo ciclo também corrigiu uma vulnerabilidade XSS por HTML não escapado e adicionou bloqueio de palavras-chave e frases estendido a apelidos de usuários. Isso faz do Nymchat mais um cliente Marmot a se juntar a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-e-expande-controles-do-cliente">White Noise&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#openchat-v024-at%c3%a9-v030">OpenChat&lt;/a>, ampliando o conjunto de apps que podem trocar mensagens de grupo criptografadas com MLS sobre o mesmo protocolo.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&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>, o app de calendário descentralizado construído sobre &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> (Calendar Events), chegou à &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.0.0">v1.0.0&lt;/a> em 29 de março. O release adiciona listas privadas de calendário usando eventos Nostr criptografados (kind &lt;code>32123&lt;/code>) com self-encryption &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads), para que usuários possam organizar eventos em coleções privadas sem expor o agrupamento aos relays. O mesmo release adiciona tratamento de intent ICS para importar dados de calendário de outras aplicações e solicitações de convite para compartilhar eventos entre usuários.&lt;/p>
&lt;h3 id="amber-v502-até-v504">Amber v5.0.2 até v5.0.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o app assinador &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lançou três 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> e &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.4">v5.0.4&lt;/a>. A adição mais visível é login por frase de recuperação mnemônica (&lt;a href="https://github.com/greenart7c3/Amber/pull/358">PR #358&lt;/a>), que permite que usuários restaurem seu signer a partir de uma seed phrase BIP39 em vez de exigir a string bruta nsec ou ncryptsec. O &lt;a href="https://github.com/greenart7c3/Amber/pull/357">PR #357&lt;/a> adiciona uma whitelist de relay auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a>, para que usuários possam restringir quais relays estão autorizados a solicitar autenticação do cliente. O &lt;a href="https://github.com/greenart7c3/Amber/pull/353">PR #353&lt;/a> adiciona seleção de escopo de criptografia para permissões de decrypt, permitindo conceder acesso apenas a NIP-04 ou apenas a NIP-44 em vez de uma permissão ampla. A v5.0.4 corrige um bug em que a rejeição não respeitava permissões com escopo de encrypt e decrypt e melhora o desempenho ao receber múltiplas requisições 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>, o signer multiplataforma, lançou &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.4.0">v0.4.0&lt;/a> em 26 de março. O release adiciona modos de autorização Full e Selective nas Settings e corrige múltiplos problemas de leitura de QR code. Commits posteriores &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> e &lt;a href="https://github.com/ZharlieW/Aegis/commit/e4f40b6f1f48c2dae1bb5e4246df26c26dba419e">e4f40b6&lt;/a> continuam o mesmo trabalho com controles de seleção em lote, estatísticas reutilizáveis de seleção em lote, APIs set-all-groups selection e estatísticas de uso por permissão na página de permissões do app.&lt;/p>
&lt;h3 id="schemata-v027-até-v030">Schemata v0.2.7 até v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Schemata&lt;/a>, as definições JSON Schema para validar kinds de evento Nostr, lançou quatro releases da &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.7">v0.2.7&lt;/a> até a &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.3.0">v0.3.0&lt;/a> com 21 PRs mergeados. A v0.3.0 traz correções de consistência de padrões em URLs de relay, IDs hex, tipos MIME e strings BOLT-11 (&lt;a href="https://github.com/nostrability/schemata/pull/126">PR #126&lt;/a>), centralização de padrões de URL de relay (&lt;a href="https://github.com/nostrability/schemata/pull/117">PR #117&lt;/a>), schemas de tipo base bech32 &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (&lt;a href="https://github.com/nostrability/schemata/pull/118">PR #118&lt;/a>), e validação para eventos spell kind 777 (&lt;a href="https://github.com/nostrability/schemata/pull/125">PR #125&lt;/a>). O pipeline de release agora publica uma nota kind &lt;code>1&lt;/code> no Nostr a cada release (&lt;a href="https://github.com/nostrability/schemata/pull/120">PR #120&lt;/a>), então o projeto se anuncia pelo próprio protocolo que valida. O Schemata agora suporta uma dúzia de linguagens além do pacote canônico JS/TS: Rust, Go, Python, Kotlin, Java, Swift, Dart, PHP, C#/.NET, C++, Ruby e C.&lt;/p>
&lt;p>Junto com o Schemata, a equipe publicou &lt;a href="https://github.com/nostrability/schemata-codegen">schemata-codegen&lt;/a>, um gerador experimental de código que toma uma abordagem diferente para o mesmo problema de validação. Onde os pacotes validadores do Schemata exigem uma dependência runtime de JSON Schema, o schemata-codegen transpõe schemas diretamente para construções tipadas de linguagem nativa (typed tag tuples, kind interfaces e runtime validators), removendo a necessidade de uma biblioteca validadora em runtime. O &lt;a href="https://github.com/nostrability/schemata-codegen/blob/main/CODEGEN-VS-VALIDATORS.md">comparativo codegen-vs-validators&lt;/a> documenta quando cada abordagem faz sentido.&lt;/p>
&lt;h3 id="bigbrotr-v650-até-v654">BigBrotr v6.5.0 até v6.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>, a plataforma de analytics de relay, lançou cinco releases da &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.0">v6.5.0&lt;/a> até a &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.4">v6.5.4&lt;/a>. A v6.5.0 centraliza a validação de URL de relay com uma factory function &lt;code>parse_relay_url()&lt;/code> e adiciona verificação de comprimento de URL e sanitização de path. A infraestrutura de monitoramento também recebeu correções: eventos de anúncio agora incluem tags de localização geohash (seguindo &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a>), e proteção por timeout foi adicionada aos testes de metadados Geo/Net &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> que não tinham deadline e podiam travar indefinidamente. O &lt;a href="https://github.com/BigBrotr/bigbrotr/pull/410">PR #410&lt;/a> faz upgrade do PostgreSQL de 16 para 18, trazendo o subsistema de async I/O e melhor throughput de WAL para o pipeline de analytics de relay.&lt;/p>
&lt;h3 id="relay-da-vertex-lab-adiciona-busca-de-perfil-nip-50">Relay da Vertex Lab adiciona busca de perfil NIP-50&lt;/h3>
&lt;p>&lt;a href="https://vertexlab.io">Vertex Lab&lt;/a>, a equipe por trás do &lt;a href="https://github.com/vertex-lab/npub.world">npub.world&lt;/a> e do motor de Web of Trust &lt;a href="https://vertexlab.io/docs">Vertex&lt;/a>, anunciou que &lt;code>wss://relay.vertexlab.io&lt;/code> agora suporta &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> (Search) para consultas de perfil. O NIP-50 estende o filtro padrão &lt;code>REQ&lt;/code> do Nostr com um campo &lt;code>search&lt;/code>, permitindo que clientes enviem consultas de full-text search a relays com suporte a indexação. Adicionar busca de perfil a um relay que já serve dados de Web of Trust significa que clientes conectados ao &lt;code>relay.vertexlab.io&lt;/code> podem descobrir usuários por nome ou descrição sem um serviço de busca separado.&lt;/p>
&lt;h3 id="hashtree-v0217-e-v0218-lançam-mesh-webrtc-e-iris-desktop">Hashtree v0.2.17 e v0.2.18 lançam mesh WebRTC e Iris Desktop&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/hashtree">Hashtree&lt;/a>, o sistema de armazenamento de blobs content-addressed do mmalmi que publica raízes de Merkle no Nostr, lançou &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.17">v0.2.17&lt;/a> e &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.18">v0.2.18&lt;/a> em 31 de março. Os dois releases encerram um sprint de 30 commits que adiciona três capacidades distintas. Primeiro, o crate &lt;code>hashtree-webrtc&lt;/code> (renomeado para &lt;code>hashtree-network&lt;/code> na v0.2.18) adiciona distribuição peer-to-peer de blobs via WebRTC com sinalização mesh unificada entre o CLI Rust, o simulation harness e o cliente TypeScript. Segundo, o pipeline de release agora constrói artefatos Windows (zip do CLI e instalador do Iris), levando a cobertura multiplataforma a macOS, Linux e Windows. Terceiro, ambos os releases empacotam o Iris Desktop 0.1.0, o cliente social Nostr do mmalmi, como assets AppImage, .deb e instalador Windows ao lado do CLI do Hashtree. O &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/">Hashtree foi coberto pela primeira vez na Newsletter #10&lt;/a> quando foi lançado como um armazenamento compatível com &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> baseado em filesystem. A camada WebRTC é o primeiro passo em direção à distribuição peer-to-peer de conteúdo sem depender de servidores Blossom centralizados.&lt;/p>
&lt;h3 id="nostr-mail-client-v070-até-v072">Nostr Mail Client v0.7.0 até v0.7.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client">Nostr Mail Client&lt;/a>, o cliente Flutter em estilo email construído sobre identidades Nostr, lançou &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> e &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.2">v0.7.2&lt;/a> em três dias. O trabalho de produto mais visível se concentrou em onboarding (&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/9">PR #9&lt;/a>) e edição de perfil (&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/10">PR #10&lt;/a>), peças básicas para qualquer cliente que tente apresentar o Nostr como uma mailbox. Os point releases posteriores empacotaram esse trabalho em novos builds Android e Linux.&lt;/p>
&lt;h3 id="wisp-v0140-até-v0163">Wisp v0.14.0 até v0.16.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, o cliente Nostr para Android, lançou mais 13 releases da &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.14.0-beta">v0.14.0-beta&lt;/a> até a &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a>. O trabalho desta semana inclui correções de rumor JSON NIP-17 (&lt;a href="https://github.com/barrydeen/wisp/pull/385">PR #385&lt;/a>), badges de repost em cards de galeria (&lt;a href="https://github.com/barrydeen/wisp/pull/383">PR #383&lt;/a>), detalhes expansíveis de reações (&lt;a href="https://github.com/barrydeen/wisp/pull/382">PR #382&lt;/a>), conjuntos persistentes de emoji (&lt;a href="https://github.com/barrydeen/wisp/pull/381">PR #381&lt;/a>) e controles de autoplay de vídeo (&lt;a href="https://github.com/barrydeen/wisp/pull/380">PR #380&lt;/a>). A mais recente &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a> também corrige shortcodes de emoji customizado com hífens e tags de emoji ausentes.&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> lançou &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.17">3.0.17&lt;/a> em 24 de março. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1000">PR #1000&lt;/a> mapeia tipos de WalletException para códigos de erro em respostas NWC, dando a clientes &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> informação estruturada de falha em vez de erros genéricos. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/995">PR #995&lt;/a> corrige votos por zap em enquetes aparecendo como Top Zaps, e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/998">PR #998&lt;/a> oculta o saldo da carteira e botões de ação quando nenhuma carteira está configurada.&lt;/p>
&lt;h3 id="openchat-v024-até-v030">OpenChat v0.2.4 até v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, o cliente de chat baseado em Avalonia construído sobre a stack &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, lançou seis releases da &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.2.4">v0.2.4&lt;/a> até a &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.3.0">v0.3.0&lt;/a> em quatro dias. O log de commits conta a história de um cliente preenchendo o espaço entre &amp;ldquo;Marmot funciona&amp;rdquo; e &amp;ldquo;alguém consegue realmente usar isso no dia a dia&amp;rdquo;. O relay authentication &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> chegou, seguido por uma UI de seleção de relay com filtragem de eventos duplicados. Mensagens de voz ganharam pause, resume, seek e exibição de tempo. O caminho do signer foi reforçado: conexões com Amber foram corrigidas com um formato atualizado de URI &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, o WebSocket faz auto-reconnect antes de enviar requests, e requisições duplicadas ao Amber agora são detectadas verificando respostas replayadas. No lado de armazenamento, Linux e macOS ganharam secure storage AES-256-GCM com chaves baseadas em arquivo, e o fetch de metadados de usuário agora usa descoberta de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e faz cache dos resultados em um banco 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>, o signer threshold &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> para iOS do projeto FROSTR, lançou &lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype/releases/tag/v1.1">v1.1&lt;/a> em 28 de março. Assinaturas FROST (Flexible Round-Optimized Schnorr Threshold) permitem que um grupo de signers controle coletivamente um par de chaves Nostr, em que qualquer conjunto t-of-n de participantes pode assinar um evento sem que nenhuma parte individual detenha a chave privada completa. O Igloo é uma das primeiras implementações mobile dessa abordagem para Nostr.&lt;/p>
&lt;h3 id="nak-v0193-e-v0194">nak v0.19.3 e v0.19.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, o toolkit de linha de comando Nostr do fiatjaf, lançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.3">v0.19.3&lt;/a> e &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.4">v0.19.4&lt;/a> em 26 e 30 de março. Ambos os releases corrigem condições de panic: o &lt;a href="https://github.com/fiatjaf/nak/pull/118">PR #118&lt;/a> substitui &lt;code>strings.Split&lt;/code> por &lt;code>strings.Cut&lt;/code> para impedir um potencial acesso out-of-bounds, e o &lt;a href="https://github.com/fiatjaf/nak/pull/119">PR #119&lt;/a> previne a mesma classe de panic no parsing de flags do 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>, uma extensão Chrome para gravação e compartilhamento descentralizado de tela no Nostr, lançou &lt;a href="https://github.com/shawnyeager/flora-extension/releases/tag/v0.3.0">v0.3.0&lt;/a>. O release adiciona compartilhamento privado de vídeo criptografado com modos público, não listado e privado. Gravações privadas são criptografadas com AES-256-GCM e entregues aos destinatários via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), então a gravação nunca toca um servidor em cleartext.&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>, o cliente Nostr mobile, lançou &lt;a href="https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.3">2.0.3&lt;/a> com avaliações de relay e pedidos de entrada, respostas aninhadas expandidas, auto-tradução de notas e suporte a múltiplos relays em NWC.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="zap-cooking-adiciona-zap-polls-e-verificação-de-pagamento-branta">Zap Cooking adiciona zap polls e verificação de pagamento Branta&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, a plataforma de receitas e conteúdo, mergeou 11 PRs nesta semana focados em conteúdo interativo e fluxos de pagamento. O &lt;a href="https://github.com/zapcooking/frontend/pull/277">PR #277&lt;/a> adiciona zap polls (kind 6969), em que usuários votam enviando sats e podem ver listas de votantes com fotos de perfil. O &lt;a href="https://github.com/zapcooking/frontend/pull/274">PR #274&lt;/a> redesenha a UX das enquetes para que a interface de votação se encaixe mais naturalmente no feed.&lt;/p>
&lt;p>O &lt;a href="https://github.com/zapcooking/frontend/pull/276">PR #276&lt;/a> adiciona leitura de QR code pela câmera ao fluxo Send Payment e integra &lt;a href="https://branta.pro/">Branta&lt;/a>, um serviço de verificação que checa se um destino de pagamento é legítimo antes do envio. A Branta verifica destinos de pagamento contra phishing, troca de endereço e interceptação man-in-the-middle antes do envio. Na implementação do Zap Cooking, um nome de plataforma e logo verificados pela Branta aparecem diretamente no fluxo de pagamento, e QR codes habilitados para Branta podem carregar parâmetros &lt;code>branta_id&lt;/code> e &lt;code>branta_secret&lt;/code> para que a carteira possa verificar o destino a partir do próprio código escaneado.&lt;/p>
&lt;h3 id="divine-prepara-o-terreno-para-busca-unificada-e-reforça-entrega-de-vídeo">diVine prepara o terreno para busca unificada e reforça entrega de vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, o cliente de vídeo short-form, passou a semana reforçando busca, navegação de feed, recuperação de playback e comportamento de upload. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2540">PR #2540&lt;/a> estabelece a base para uma tela de busca unificada, com seções agrupadas para Videos, People e Tags. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2623">PR #2623&lt;/a> endurece a paginação em feeds de perfil, inbox, notificações, listas discover, classic vines, busca e feeds de grid composable ao movê-los para um controlador de paginação compartilhado.&lt;/p>
&lt;p>A entrega de vídeo também recebeu várias correções concretas. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2643">PR #2643&lt;/a> tenta novamente fontes derivadas hospedadas pela Divine em ordem e faz fallback para o blob bruto antes de exibir um erro de playback, para que falhas transitórias em uma fonte não matem o playback imediatamente. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2634">PR #2634&lt;/a> mantém uploads resumíveis no caminho controlado pela Divine quando o probing de capacidades falha de forma transitória, reduzindo uploads quebrados por pequenas falhas de rede. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2637">PR #2637&lt;/a> também muda a barreira de conteúdo sensível para que vídeos só sejam efetivamente bloqueados por labels reais de warning, não apenas por labels de content warning fornecidas pelo criador.&lt;/p>
&lt;h3 id="shopstr-adiciona-storefronts-customizadas-e-milk-market-segue-entregando-trabalho-de-marketplace">Shopstr adiciona storefronts customizadas e Milk Market segue entregando trabalho de marketplace&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, o marketplace baseado em Nostr, mergeou o &lt;a href="https://github.com/shopstr-eng/shopstr/pull/245">PR #245&lt;/a> adicionando storefronts customizadas. Isso dá aos vendedores uma superfície de home mais distinta em vez de forçar cada listagem à mesma apresentação genérica.&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>, um marketplace dedicado a leite, continuou com otimizações de storefront (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/18">PR #18&lt;/a>), recuperação de conta (&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>) e correções de tipagem de ferramentas MCP (&lt;a href="https://github.com/shopstr-eng/milk-market/pull/16">PR #16&lt;/a>).&lt;/p>
&lt;h3 id="notedeck-adiciona-efeitos-sonoros-e-estende-o-caminho-do-atualizador-rumo-ao-android">Notedeck adiciona efeitos sonoros e estende o caminho do atualizador rumo ao Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop da equipe Damus, mergeou o &lt;a href="https://github.com/damus-io/notedeck/pull/1412">PR #1412&lt;/a> adicionando um subsistema de efeitos sonoros com sons de interação de UI usando rodio, e o &lt;a href="https://github.com/damus-io/notedeck/pull/1399">PR #1399&lt;/a> com atualizações do Agentium incluindo uma flag de título para CLI e pastas de sessão colapsáveis. Um &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> aberto propõe self-update de APK via Nostr/Zapstore no Android, construindo sobre &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/#notedeck-move-descoberta-de-releases-para-o-nostr">o trabalho de atualizador nativo do Nostr do Notedeck coberto na Newsletter #14&lt;/a>.&lt;/p>
&lt;h3 id="nostria-adiciona-relay-hints-em-reposts-e-alinhamento-com-nip-98">Nostria adiciona relay hints em reposts e alinhamento com NIP-98&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> mergeou o &lt;a href="https://github.com/nostria-app/nostria/pull/583">PR #583&lt;/a> adicionando relay hints &lt;a href="https://nostrcompass.org/pt/topics/nip-18/">NIP-18&lt;/a> (Reposts) a tags &lt;code>e&lt;/code> de repost para eventos kind 6 e kind 16, o &lt;a href="https://github.com/nostria-app/nostria/pull/582">PR #582&lt;/a> alinhando auth HTTP do Brainstorm (kind 27235) às tags obrigatórias &lt;a href="https://nostrcompass.org/pt/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth), e o &lt;a href="https://github.com/nostria-app/nostria/pull/576">PR #576&lt;/a> adicionando testes de validação de schema do Schemata. A mudança NIP-98 significa que o Nostria pode autenticar-se em serviços externos usando o mesmo formato de auth HTTP que outros clientes usam.&lt;/p>
&lt;h3 id="nostr-doc-adiciona-empacotamento-desktop-e-trabalho-offline-first">Nostr-Doc adiciona empacotamento desktop e trabalho offline-first&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-docs">Nostr-Doc&lt;/a>, o editor colaborativo da Form*, teve uma semana movimentada de empacotamento e trabalho de editor. O &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/fcdc00a564c8d76f094c586b06efce07592a60e4">commit fcdc00a&lt;/a> adiciona um app desktop, o &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/3977a8eb2e62b84a67de756c2776e14de8470927">commit 3977a8e&lt;/a> inicia trabalho de app nativo, e o &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/413a030f5b47fb8e32a5dff81bcef557ad9b5869">commit 413a030&lt;/a> empurra o app em direção a comportamento offline-first. No lado do editor, o &lt;a href="https://github.com/formstr-hq/nostr-docs/commit/1855ce86ee83ad504e14e47d9c339baffb114786">commit 1855ce8&lt;/a> adiciona salvar com Ctrl+S, avisos de save, correções de link preview e renderização corrigida de strikethrough.&lt;/p>
&lt;h3 id="rust-nostr-otimiza-parsing-de-nip-21-e-adiciona-suporte-a-nip-62-do-lado-do-relay">rust-nostr otimiza parsing de NIP-21 e adiciona suporte a NIP-62 do lado do relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> mergeou oito PRs. O mais notável é o &lt;a href="https://github.com/rust-nostr/nostr/pull/1308">PR #1308&lt;/a>, que otimiza o parsing de URI &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> em &lt;code>PublicKey::parse&lt;/code> alinhando-o ao desempenho padrão de parsing bech32. Antes disso, URIs NIP-21 levavam aproximadamente o dobro do tempo para serem parseados em relação a chaves bech32 brutas. O projeto também tem quatro PRs abertos adicionando suporte específico de relay a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) nos backends memory, LMDB, SQLite e 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-adiciona-controle-manual-de-relays-de-bunker-e-corrige-parsing-multi-relay-de-nip-47">nostr-tools adiciona controle manual de relays de bunker e corrige parsing multi-relay de NIP-47&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> mergeou o &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/530">PR #530&lt;/a> adicionando &lt;code>skipSwitchRelays&lt;/code> a BunkerSignerParams para gerenciamento manual de relays, e o &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/529">PR #529&lt;/a> corrigindo o parsing de connection string &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) para suportar múltiplos relays como a spec permite.&lt;/p>
&lt;h3 id="nostrability-integra-dados-de-auditoria-do-sherlock-e-publica-visão-geral-do-schemata">Nostrability integra dados de auditoria do Sherlock e publica visão geral do Schemata&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/nostrability">Nostrability&lt;/a>, o tracker de interoperabilidade para clientes Nostr, mergeou 14 PRs. O &lt;a href="https://github.com/nostrability/nostrability/pull/306">PR #306&lt;/a> integra estatísticas de scan do Sherlock ao dashboard. Sherlock é a ferramenta automatizada de auditoria da Nostrability que se conecta a clientes Nostr, captura os eventos que eles publicam e valida cada evento contra as definições JSON Schema do Schemata para detectar violações de spec. O dashboard agora mostra taxas de falha de schema por cliente (&lt;a href="https://github.com/nostrability/nostrability/pull/315">PR #315&lt;/a>), para que desenvolvedores possam ver quais kinds de evento seu cliente implementa incorretamente. O &lt;a href="https://github.com/nostrability/nostrability/pull/323">PR #323&lt;/a> reformula o workflow de publicação no Nostr para que anúncios de release rodem como um job separado que não pode ser cancelado por etapas anteriores de CI.&lt;/p>
&lt;p>elsat também publicou &lt;a href="https://njump.me/naddr1qvzqqqr4gupzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcqz4fnx4rkw3x57nrcwdn8zt22xd982jehfptsgqtrww">Schemata for nostr devs&lt;/a> em 30 de março, descrevendo como schemata, schemata-codegen e Sherlock se encaixam e fornecendo números atuais de cobertura: 179 schemas de kind de evento em 65 NIPs, 154 schemas de tags, 13 mensagens de protocolo e 310 eventos de exemplo.&lt;/p>
&lt;h3 id="nalgorithm-adiciona-geração-de-digest-e-cache-local-de-score">Nalgorithm adiciona geração de digest e cache local de score&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/nalgorithm">Nalgorithm&lt;/a>, um novo projeto de feed Nostr ranqueado por relevância, iniciou desenvolvimento público nesta semana. O &lt;a href="https://github.com/jooray/nalgorithm/commit/cf6c501e754ef95a1b4fecc1a76288471a101f43">commit cf6c501&lt;/a> estabelece o app web inicial que busca posts de follows e os pontua contra um prompt de preferência definido pelo usuário. O &lt;a href="https://github.com/jooray/nalgorithm/commit/8e931b6ae85d470e73603752134ff49b7ba4bb86">commit 8e931b6&lt;/a> adiciona uma ferramenta CLI de digest que transforma posts mais bem ranqueados em um resumo falado, enquanto o &lt;a href="https://github.com/jooray/nalgorithm/commit/4cb9c635489a9a3429e8d71f3861dc2a11624153">commit 4cb9c63&lt;/a> adiciona cache de scores em arquivo e evolução incremental do prompt aprendido a partir de likes recentes. O &lt;a href="https://github.com/jooray/nalgorithm/commit/c2edfb8b89fadbe0028c3f5729bda7e23b2e3c03">commit c2edfb8&lt;/a> também para de fazer cache de fallback scores de batches que falharam, para que uma falha transitória de scoring não achate permanentemente o ranking de um post.&lt;/p>
&lt;h3 id="tenex-adiciona-vector-store-para-rag-e-startup-direcionado-de-mcp">TENEX adiciona vector store para RAG e startup direcionado de MCP&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, o framework de agentes nativo do Nostr que conecta agentes de IA a canais Nostr via Telegram, mergeou sete PRs nesta semana. O &lt;a href="https://github.com/tenex-chat/tenex/pull/101">PR #101&lt;/a> adiciona uma abstração plugável de vector store com backends SQLite-vec, LanceDB e Qdrant, dando aos agentes retrieval-augmented generation sem travar em um banco vetorial específico. O &lt;a href="https://github.com/tenex-chat/tenex/pull/102">PR #102&lt;/a> torna o startup de MCP direcionado: apenas servidores MCP cujas ferramentas um agente realmente usa são iniciados, em vez de subir todos os servidores eager no primeiro uso. O &lt;a href="https://github.com/tenex-chat/tenex/pull/100">PR #100&lt;/a> adiciona uma ferramenta &lt;code>send_message&lt;/code> para que agentes com bindings de canal Telegram possam enviar mensagens proativamente em vez de apenas responder a mensagens recebidas. O &lt;a href="https://github.com/tenex-chat/tenex/pull/106">PR #106&lt;/a> evita um spawn de subprocesso que disparava uma pré-alocação de 9 GB de memória Bun/JSC lendo &lt;code>.git/HEAD&lt;/code> diretamente em vez de executar &lt;code>git branch&lt;/code>.&lt;/p>
&lt;h3 id="dart-ndk-move-suporte-a-signer-amber-e-adiciona-alby-go-1-click">Dart NDK move suporte a signer Amber e adiciona Alby Go 1-click&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk">Dart NDK&lt;/a>, o kit de desenvolvimento Nostr para Flutter, lançou 11 PRs mergeados. O &lt;a href="https://github.com/relaystr/ndk/pull/525">PR #525&lt;/a> move suporte ao signer Amber para o pacote ndk_flutter, e o &lt;a href="https://github.com/relaystr/ndk/pull/552">PR #552&lt;/a> adiciona conexão one-click com Alby Go na sample app. O &lt;a href="https://github.com/relaystr/ndk/pull/502">PR #502&lt;/a> adiciona um script install.sh para o CLI, e o &lt;a href="https://github.com/relaystr/ndk/pull/523">PR #523&lt;/a> remove a dependência do verificador Rust em favor de tratamento nativo de assets.&lt;/p>
&lt;h2 id="trabalho-de-protocolo-e-spec">Trabalho de Protocolo e Spec&lt;/h2>
&lt;h3 id="marmot-move-keypackages-para-eventos-endereçáveis-e-reforça-push-notifications">Marmot move KeyPackages para eventos endereçáveis e reforça push notifications&lt;/h3>
&lt;p>A &lt;a href="https://github.com/marmot-protocol/marmot">specificação Marmot&lt;/a> mergeou quatro PRs que mudam como o protocolo trata material de chave e associação de grupo. O &lt;a href="https://github.com/marmot-protocol/marmot/pull/54">PR #54&lt;/a> migra eventos KeyPackage de &lt;code>kind:443&lt;/code> regular para &lt;code>kind:30443&lt;/code> endereçável com uma tag &lt;code>d&lt;/code>, eliminando a necessidade de deleção de eventos &lt;a href="https://nostrcompass.org/pt/topics/nip-09/">NIP-09&lt;/a> durante rotação de chave. Eventos endereçáveis sobrescrevem no lugar, tornando a rotação autocontida. O &lt;a href="https://github.com/marmot-protocol/marmot/pull/57">PR #57&lt;/a> permite que usuários não-admin façam commit de propostas SelfRemove (saída voluntária do grupo), e o &lt;a href="https://github.com/marmot-protocol/marmot/pull/62">PR #62&lt;/a> exige que admins renunciem ao status de admin antes de usar SelfRemove, prevenindo que um admin desapareça enquanto ainda detém privilégios elevados.&lt;/p>
&lt;p>O &lt;a href="https://github.com/marmot-protocol/marmot/pull/61">PR #61&lt;/a> reforça o formato de push notification &lt;a href="https://nostrcompass.org/pt/topics/mip-05/">MIP-05&lt;/a>, tornando explícitos a codificação base64 em blob único, versionamento, wire format de token e uso de chave x-only. O efeito é uma representação wire única e definida para blobs de token e chaves x-only em spec, bibliotecas cliente e backends de app. A implementação dessas mudanças de spec chegou à stack White Noise nesta semana e está coberta na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#white-noise-corrige-churn-de-relays-e-expande-controles-do-cliente">seção White Noise v2026.3.23 acima&lt;/a>.&lt;/p>
&lt;h3 id="atualizações-de-nips">Atualizações de NIPs&lt;/h3>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&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 manifesto kind &lt;code>15128&lt;/code> (site raiz) e kind &lt;code>35128&lt;/code> (site nomeado) para hospedar sites estáticos sob pares de chaves Nostr usando armazenamento Blossom. Veja o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#nip-deep-dive-nip-5a-sites-est%c3%a1ticos">deep dive abaixo&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-30/">NIP-30&lt;/a> (Custom Emoji): Permitir hífens em shortcodes&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2297">PR #2297&lt;/a>): Atualiza a descrição de shortcode para incluir hífens. Shortcodes com hífen já são usados na prática desde a introdução do NIP, então a spec agora documenta o uso atual.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&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>): Propõe um formato estruturado de mensagem para agentes enviarem elementos interativos de UI por DMs criptografadas, incluindo payloads tipados &lt;code>text&lt;/code>, &lt;code>buttons&lt;/code>, &lt;code>card&lt;/code> e &lt;code>table&lt;/code>. O rascunho mantém tudo dentro do conteúdo JSON de mensagens diretas existentes &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a>. Não define um novo kind de evento e usa um formato simples de callback string para respostas de botões.&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>): Propõe um modelo híbrido de relay no qual relays permanecem autoritativos, mas também podem coordenar distribuição peer-to-peer de eventos recentes via WebRTC. O rascunho introduz mensagens de relay como &lt;code>PEER_REGISTER&lt;/code>, &lt;code>PEER_REQUEST&lt;/code> e &lt;code>PEER_OFFER&lt;/code>, com clientes estáveis atuando como Super Peers e o relay agindo como seed node e 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 a antiga ideia de zap poll do NIP-69 agora que &lt;a href="https://github.com/nostr-protocol/nips/blob/master/88.md">NIP-88&lt;/a> (Polls) cobre enquetes gratuitas. O rascunho usa definições de enquete kind &lt;code>6969&lt;/code> e zaps kind &lt;code>9734&lt;/code> como votos, tornando-o um sistema de enquetes pagas com resistência econômica a Sybil. Ele complementa enquetes gratuitas one-key-one-vote.&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>): Propõe uma convenção na qual zaps enviados à pubkey de um relay ou de um cliente são exibidos como notas promocionais especializadas, transformando efetivamente recibos de zap em uma superfície de anúncio. Operadores de relay e clientes publicariam perfis com &lt;code>lud16&lt;/code>, buscariam esses recibos, extrairiam o conteúdo embutido das descrições de zap e poderiam opcionalmente definir thresholds mínimos em sats para reduzir 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>): Propõe kind &lt;code>30085&lt;/code> como um evento parameterized replaceable para attestations estruturadas de reputação sobre agentes Nostr. O rascunho evita um score global único ao tornar a reputação dependente do observador, adiciona decaimento temporal para que attestations antigas percam peso, suporta avaliações negativas com exigência de evidência e esboça tanto weighted scoring simples quanto graph-diversity scoring para melhor resistência a 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>): Propõe eventos addressable kind &lt;code>31402&lt;/code> para anunciar APIs HTTP pagas, com Nostr cuidando da descoberta e HTTP 402 do pagamento. O rascunho é tags-first para que relays possam filtrar por métodos de pagamento, preços e capacidades sem fazer parsing de conteúdo JSON, e permite schemas opcionais de request e response para que clientes ou agentes possam auto-gerar chamadas.&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>): Propõe derivar um par de chaves Nostr de uma assinatura ECDSA de LNURL-auth combinada com um nonce aleatório do lado do cliente. A fórmula de derivação é &lt;code>nsec = SHA256(ecdsa_signature || nonce)&lt;/code>. O servidor vê a assinatura ECDSA, inerente ao handshake LNURL-auth, mas nunca vê o nonce, e o browser gera o nonce, mas não controla a assinatura. Nenhuma das partes isoladamente consegue derivar o nsec. O resultado pretendido é que a mesma carteira Lightning produza a mesma chave Nostr entre dispositivos, com a carteira como âncora de recuperação e sem que nenhum servidor consiga reconstruir a chave privada.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/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 o campo &lt;code>rejected&lt;/code> para respostas de signer baseadas em intent, formalizando o comportamento que &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amethyst-lan%c3%a7a-notas-fixadas-gerenciamento-de-relay-e-request-to-vanish">a correção da série v1.07.x do Amethyst&lt;/a> precisou contornar.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-5a-sites-estáticos">NIP Deep Dive: NIP-5A (Sites estáticos)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> define como hospedar sites estáticos sob pares de chaves Nostr, usando dois kinds de evento e infraestrutura existente de armazenamento de blobs para transformar eventos assinados em páginas web servidas. A &lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">especificação&lt;/a> foi mergeada em 25 de março via &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>.&lt;/p>
&lt;p>O modelo usa kind &lt;code>15128&lt;/code> para um site raiz, um por pubkey, e kind &lt;code>35128&lt;/code> para sites nomeados identificados por uma tag &lt;code>d&lt;/code>. Cada manifesto mapeia caminhos absolutos de URL para hashes SHA256. Aqui está um manifesto de site raiz:&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>O fluxo de serving funciona em três etapas. Um servidor host recebe uma requisição HTTP, extrai a pubkey do autor do subdomínio, seja um npub para sites raiz ou uma pubkey codificada em base36 para sites nomeados, busca a lista de relays do autor via &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e consulta o manifesto do site. Quando encontra o manifesto, o servidor resolve o caminho solicitado para um hash de conteúdo, baixa o blob correspondente do servidor Blossom ou dos servidores listados nas tags &lt;code>server&lt;/code> e o retorna.&lt;/p>
&lt;p>O formato do subdomínio DNS é rigidamente especificado. Sites raiz usam o npub padrão como subdomínio. Sites nomeados usam uma codificação base36 de 50 caracteres da pubkey bruta seguida pelo valor da tag &lt;code>d&lt;/code>, tudo em um único label DNS. Como labels DNS são limitados a 63 caracteres e a codificação base36 sempre ocupa 50, a tag &lt;code>d&lt;/code> é limitada a 13 caracteres. A spec também exige que tags &lt;code>d&lt;/code> correspondam a &lt;code>^[a-z0-9-]{1,13}$&lt;/code> e não terminem com hífen, prevenindo ambiguidades de resolução DNS.&lt;/p>
&lt;p>Usar hashes de conteúdo significa que o mesmo site pode ser servido por diferentes servidores host, e a integridade dos arquivos é verificável sem confiar no servidor. Um servidor host não precisa armazenar arquivos por conta própria. Ele os busca sob demanda no Blossom usando os hashes do manifesto. Isso significa que o autor controla o que é servido, o servidor Blossom armazena os arquivos brutos, e o servidor host apenas conecta os dois. Qualquer um desses três componentes pode ser substituído de forma independente.&lt;/p>
&lt;p>Implementações existentes incluem &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>, o servidor host que resolve manifestos e serve arquivos, e &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>, uma UI para construir e publicar manifestos. A spec também adicionou uma tag &lt;code>source&lt;/code> para vincular ao repositório de código-fonte do site, e a atualização de README mergeada separadamente no &lt;a href="https://github.com/nostr-protocol/nips/pull/2286">PR #2286&lt;/a> registrou os kinds &lt;code>15128&lt;/code> e &lt;code>35128&lt;/code> no índice de kinds do 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 uma requisição para que relays deletem todos os eventos da pubkey solicitante. A &lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">especificação&lt;/a> é motivada por questões legais: em jurisdições com leis de direito ao esquecimento, ter uma requisição padronizada e assinada de deleção dá a operadores de relay um sinal claro para agir.&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>A spec separa vanish requests direcionadas e globais. Uma requisição direcionada inclui tags &lt;code>relay&lt;/code> específicas identificando quais relays devem agir. Uma requisição global usa a string literal &lt;code>ALL_RELAYS&lt;/code> como valor da tag relay, pedindo que todo relay que veja o evento delete todos os eventos daquela pubkey. Relays que cumprem também devem garantir que eventos deletados não possam ser republicados de volta no relay, tornando a deleção sticky.&lt;/p>
&lt;p>O NIP-62 vai além do &lt;a href="https://nostrcompass.org/pt/topics/nip-09/">NIP-09&lt;/a> (Event Deletion) em escopo e intenção. O NIP-09 permite deletar eventos individuais, e relays MAY cumprir. O NIP-62 solicita a deleção de tudo, e a spec diz que relays MUST cumprir se sua URL estiver tagueada. Ela também pede que relays deletem eventos &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) que tenham p-tag para a pubkey solicitante, o que significa que DMs recebidas são limpas junto com os próprios eventos do usuário. Publicar uma deleção NIP-09 contra uma vanish request NIP-62 não tem efeito: depois que você vanish, não pode un-vanish deletando a própria vanish request.&lt;/p>
&lt;p>Nesta semana, o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-04-01-newsletter/#amethyst-lan%c3%a7a-notas-fixadas-gerenciamento-de-relay-e-request-to-vanish">Amethyst v1.07.0&lt;/a> lançou suporte do lado do cliente ao NIP-62, permitindo que usuários iniciem vanish requests pelo app. Do lado do relay, &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> tem quatro PRs abertos adicionando suporte a NIP-62 nos backends memory, LMDB, SQLite e 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>). Isso coloca trabalho de suporte em cliente e relay na mesma semana.&lt;/p>
&lt;p>O desenho do protocolo levanta uma tensão prática. A proposta de valor do Nostr inclui resistência à censura, significando que relays não deveriam ser capazes de impedir publicação. O NIP-62 introduz um caso em que um relay MUST impedir republicação de uma pubkey específica. As duas propriedades coexistem porque a requisição é autodirigida: você está pedindo a deleção dos seus próprios eventos, não dos eventos de outra pessoa. A propriedade de resistência à censura permanece intacta para todos, exceto para a pessoa que explicitamente optou por sair.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Construindo algo ou tem novidades para compartilhar? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #15</title><link>https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o 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> segue seu lançamento 3.0 de carteira com &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#primal-adiciona-follow-packs-enriquecimento-de-zap-e-deep-links">Follow Packs, enriquecimento de zap e deep links &lt;code>primalconnect://&lt;/code>&lt;/a>. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> publica uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#bigbrotr-mapeia-chaves-privadas-expostas-na-rede-de-relays">análise de vazamento de nsec&lt;/a>, escaneando 41 milhões de eventos em 1.085 relays e encontrando 16.599 chaves privadas válidas, enquanto &lt;a href="https://npub.world">npub.world&lt;/a> integra alertas de vazamento às páginas de perfil na mesma semana. Martti Malmi lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostr-vpn-%c3%a9-lan%c3%a7ado-como-alternativa-ao-tailscale">nostr-vpn&lt;/a>, uma alternativa ao Tailscale que sinaliza sobre relays Nostr e cria túneis WireGuard, com 11 releases em sete dias. A equipe do &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#doom-open-source-roda-peer-to-peer-sobre-o-nostr">abre o código do DOOM P2P&lt;/a> sobre Nostr, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#fips-v020-lan%c3%a7a-transporte-tor-builds-reproduz%c3%adveis-e-exemplos-sidecar">v0.2.0&lt;/a>, e &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> se expande para &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostrability-schemata-fica-multil%c3%adngue">seis linguagens&lt;/a> em uma semana.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o 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> segue seu lançamento 3.0 de carteira com &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#primal-adiciona-follow-packs-enriquecimento-de-zap-e-deep-links">Follow Packs, enriquecimento de zap e deep links &lt;code>primalconnect://&lt;/code>&lt;/a>. &lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> publica uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#bigbrotr-mapeia-chaves-privadas-expostas-na-rede-de-relays">análise de vazamento de nsec&lt;/a>, escaneando 41 milhões de eventos em 1.085 relays e encontrando 16.599 chaves privadas válidas, enquanto &lt;a href="https://npub.world">npub.world&lt;/a> integra alertas de vazamento às páginas de perfil na mesma semana. Martti Malmi lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostr-vpn-%c3%a9-lan%c3%a7ado-como-alternativa-ao-tailscale">nostr-vpn&lt;/a>, uma alternativa ao Tailscale que sinaliza sobre relays Nostr e cria túneis WireGuard, com 11 releases em sete dias. A equipe do &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#doom-open-source-roda-peer-to-peer-sobre-o-nostr">abre o código do DOOM P2P&lt;/a> sobre Nostr, &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lança &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#fips-v020-lan%c3%a7a-transporte-tor-builds-reproduz%c3%adveis-e-exemplos-sidecar">v0.2.0&lt;/a>, e &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> se expande para &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostrability-schemata-fica-multil%c3%adngue">seis linguagens&lt;/a> em uma semana.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="primal-adiciona-follow-packs-enriquecimento-de-zap-e-deep-links">Primal adiciona Follow Packs, enriquecimento de zap e deep links&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/">Seguindo a cobertura da versão 3.0.7 da semana passada&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> passou esta semana em trabalho pós-release em torno de onboarding, UX do composer e contexto de carteira. O onboarding redesenhado introduz Follow Packs (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/949">PR #949&lt;/a>), um botão nativo de GIF entra no composer de notas, um serviço de enriquecimento de zap (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/979">PR #979&lt;/a>) anota transações da carteira com contexto de zap, e um 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 navegação entre apps.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> está entregando o mesmo trabalho em paralelo via TestFlight, com a troca de carteira (&lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/191">PR #191&lt;/a>), a implementação de enquetes e a refatoração do onboarding chegando na mesma janela.&lt;/p>
&lt;h3 id="bigbrotr-mapeia-chaves-privadas-expostas-na-rede-de-relays">BigBrotr mapeia chaves privadas expostas na rede de relays&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a>, a plataforma de analytics de relays Nostr, publicou uma &lt;a href="https://bigbrotr.com/blog/exposed-nsec-analysis/">análise detalhada de chaves privadas expostas&lt;/a> na rede de relays. O estudo escaneou 41 milhões de eventos em 1.085 relays, procurando strings nsec válidas embutidas no conteúdo dos eventos, e encontrou 16.599 chaves privadas válidas. Esse número parece alarmante até que se filtre um bot chamado &amp;ldquo;Mr.nsec&amp;rdquo;, responsável por 92% das ocorrências. Depois de remover o tráfego de bots, apenas 38 contas reais com mais de 21.000 seguidores combinados tinham chaves expostas, e nenhuma mostrava sinais de saber que suas chaves estavam públicas.&lt;/p>
&lt;p>A equipe construiu um nsec-leak-checker como um serviço &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a> (Data Vending Machine), permitindo que usuários verifiquem se sua chave privada aparece em algum ponto do dataset escaneado sem revelar a chave ao verificador. &lt;a href="https://npub.world">npub.world&lt;/a> integrou os dados de vazamento na mesma semana, exibindo banners de aviso em páginas de perfil onde chaves expostas foram detectadas. A combinação dá à rede tanto uma interface programática para DVMs e agentes quanto um aviso legível por humanos para usuários comuns. O dataset subjacente também alimenta o &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.4.0">BigBrotr v6.4.0&lt;/a>, que adiciona materialized views de eventos replaceable e addressable e uma correção de timeout ocioso do sincronizador.&lt;/p>
&lt;h3 id="nostr-vpn-é-lançado-como-alternativa-ao-tailscale">nostr-vpn é lançado como alternativa ao Tailscale&lt;/h3>
&lt;p>Martti Malmi (mmalmi), criador do Iris, construiu e lançou &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>, uma VPN peer-to-peer que usa relays Nostr para sinalização e WireGuard (via boringtun) para túneis criptografados. A motivação foi direta: &amp;ldquo;Got annoyed by Tailscale requiring 3rd party accounts, so created Nostr VPN.&amp;rdquo; A ferramenta cria redes mesh entre dispositivos usando pares de chaves Nostr como identidade, sem servidor central de coordenação.&lt;/p>
&lt;p>O projeto lançou 11 releases em sete dias, da &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.2">v0.2.2&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.13">v0.2.13&lt;/a>. Esse sprint adicionou suporte a Windows, pareamento LAN para descoberta em rede local e um sidecar Android para dispositivos móveis. A arquitetura é simples: dois dispositivos trocam metadados de conexão por relays Nostr e depois estabelecem um túnel WireGuard direto. Nostr lida com descoberta e sinalização para travessia de NAT. WireGuard cuida do tráfego real. A identidade é um par de chaves Nostr.&lt;/p>
&lt;p>Malmi também continuou avançando &lt;a href="https://github.com/mmalmi/nostr-double-ratchet">nostr-double-ratchet&lt;/a>, uma biblioteca de canal de mensagens seguras ao estilo Signal, com seis releases da &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.86">v0.0.86&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.93">v0.0.93&lt;/a> durante a mesma semana.&lt;/p>
&lt;h3 id="doom-open-source-roda-peer-to-peer-sobre-o-nostr">DOOM open-source roda peer-to-peer sobre o Nostr&lt;/h3>
&lt;p>A equipe do &lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> abriu o código de uma implementação multiplayer peer-to-peer de DOOM que usa Nostr para descoberta de pares, &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> para criptografia end-to-end e &lt;a href="https://github.com/n0-computer/iroh">Iroh&lt;/a>, a biblioteca de rede QUIC da n0, para transporte gossip. O jogo é distribuído como um arquivo WebXDC de 4,2 MB que pode ser enviado dentro de mensagens de chat, sem exigir servidores para hospedar ou coordenar uma partida.&lt;/p>
&lt;p>A abordagem técnica substitui o lockstep netcode original de 1993 por um modelo híbrido de sincronização em tempo real. Jogadores se descobrem por consultas a relays Nostr, negociam sessões por canais criptografados com Marmot e então passam o tráfego de baixa latência do jogo para a camada gossip QUIC do Iroh. A stack usa Nostr para descoberta, Marmot para criptografia e Iroh para transporte.&lt;/p>
&lt;p>O Vector também entregou endurecimento de segurança nesta semana. O release adiciona um key vault endurecido em memória com proteções anti-debug e zeroize para material de chave sensível, bloqueio de usuários com filtragem completa de DMs e mensagens de grupo, e correções do canal realtime WebXDC para Mini Apps.&lt;/p>
&lt;h3 id="fips-v020-lança-transporte-tor-builds-reproduzíveis-e-exemplos-sidecar">FIPS v0.2.0 lança transporte Tor, builds reproduzíveis e exemplos sidecar&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>, o projeto Free Internetworking Peering System e de redes mesh adjacente ao Nostr, lançou &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.2.0-rel">v0.2.0&lt;/a>. O release adiciona suporte a transporte Tor para links mesh anonimizados, builds reproduzíveis, um exemplo sidecar que se conecta por um relay Nostr, e publicação de releases Nostr no workflow de pacotes OpenWrt. O release também corrige picos de jitter pós-rekey causados por drain-window frames. O wire format mudou em relação à v0.1.0, então nós existentes em v0.1.0 não podem interoperar com a v0.2.0 sem upgrade.&lt;/p>
&lt;h3 id="nostrability-schemata-fica-multilíngue">Nostrability Schemata fica multilíngue&lt;/h3>
&lt;p>O projeto &lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a>, que mantém definições JSON Schema para validar kinds de evento Nostr, passou de JavaScript apenas para seis linguagens em uma semana. Novos pacotes foram lançados para Rust, Go, Dart, Swift e Python, cada um fornecendo tanto um pacote de dados quanto um validador. A &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.6">v0.2.6&lt;/a> também adicionou 17 novos schemas de kinds de evento.&lt;/p>
&lt;p>O &lt;a href="https://nostrability.github.io/nostrability/">tracker de interoperabilidade da Nostrability&lt;/a> recebeu uma reformulação em paralelo. Uma nova aba What&amp;rsquo;s New publica atualizações tanto por um feed Atom quanto por um evento Nostr, o filtro por categoria de app permite que visitantes foquem em tipos específicos de cliente, e o tracker agora detecta automaticamente linguagens de programação a partir dos metadados dos repositórios GitHub. A Nostrability também agora tem seu próprio npub, tornando o projeto descobrível pelo próprio protocolo que documenta. Para autores de bibliotecas que trabalham entre linguagens, os pacotes de schema multilíngues significam que as mesmas definições de kinds de evento ficam disponíveis como imports nativos em vez de exigir que cada projeto mantenha sua própria cópia dos schemas.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="amethyst-v1060-e-v1061">Amethyst v1.06.0 e v1.06.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, lançou &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.0">v1.06.0&lt;/a> e &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.1">v1.06.1&lt;/a> em 23 de março. O principal recurso é suporte a enquetes usando dados &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) para votação ponderada, com cards redesenhados de enquete e zap poll. A nova renderização dá tanto às enquetes padrão quanto às ponderadas por zap um layout visual mais limpo. A v1.06.1 vem em seguida com correções para crashes de modificação concorrente que tratam regressões de estabilidade introduzidas no caminho de renderização das enquetes.&lt;/p>
&lt;h3 id="amber-v500-e-v501">Amber v5.0.0 e v5.0.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o app assinador &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), promoveu seu trabalho recente de pre-release da série 4.1.x para estável com a &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.0">v5.0.0&lt;/a> em 18 de março. Esse release estável traz o relay-auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a>, Tor embutido, permissões específicas por tipo de conteúdo e armazenamento criptografado de PIN cobertos na semana passada. A &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.1">v5.0.1&lt;/a> então remove a permissão de internet do flavor offline, de modo que esse build não pode mais fazer requisições de rede na camada de permissões do Android.&lt;/p>
&lt;h3 id="mostro-v0170-e-mostro-mobile-v122">Mostro v0.17.0 e Mostro Mobile v1.2.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, a exchange peer-to-peer de Bitcoin construída sobre Nostr, lançou &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.0">v0.17.0&lt;/a> em 18 de março. O release do servidor continua o trabalho de disputa e reputação do ciclo v0.16.x, adicionando dados mais completos de reputação comercial para compradores e vendedores como eventos Nostr. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, o cliente Flutter, acompanhou com a &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.2">v1.2.2&lt;/a> em 23 de março, mantendo a interface mobile sincronizada com as mudanças mais recentes do 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>, o app de live streaming Nostr, lançou &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.14.0">v0.14.0&lt;/a> em 19 de março com o lançamento do Shosho Shop. O release adiciona uma aba Shop em perfis, Shop em Browse e um botão In-Live Shop em lives e clips. As release notes dizem que produtos Nostr existentes aparecem automaticamente e que compradores clicam até a página do vendedor no Plebeian Market para compra. As release notes do Shosho não identificam o kind de evento de listagem, então ainda não é possível confirmar se o Shosho Shop lê as mesmas listagens classificadas &lt;a href="https://nostrcompass.org/pt/topics/nip-99/">NIP-99&lt;/a> que &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> suporta explicitamente em seu 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>, a coleção de pacotes auxiliares do hzrd149 para construir aplicações Nostr, lançou &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core@5.2.0">v5.2.0&lt;/a> em 22 de março. O release cobre seis pacotes. O pacote SQLite corrige uma colisão de constraint UNIQUE em tags de evento que causava inserts duplicados. O pacote signers adiciona &lt;code>AndroidNativeSigner&lt;/code>, que encapsula a interface nativa do assinador Android &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> para que apps baseados em web-view possam usar assinatura com hardware backing sem bridge code customizado. O pacote relay adiciona um campo &lt;code>challenge&lt;/code> aos objetos de status de relay e pool, rastreando estado de auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> para que apps possam detectar quando um relay está pedindo autenticação e responder programaticamente. O pacote core ganha métodos &lt;code>isEventPointerSame&lt;/code> e &lt;code>isAddressPointerSame&lt;/code> para deduplicar referências de eventos, e o pacote common adiciona &lt;code>user.blossomServers$&lt;/code> para resolver os servidores Blossom de um usuário. Applesauce alimenta noStrudel, Satellite e vários outros clientes web, então essas correções se propagam pela camada de clientes web.&lt;/p>
&lt;h3 id="wisp-lança-16-releases-em-uma-semana">Wisp lança 16 releases em uma semana&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>, o cliente Nostr para Android, lançou 16 releases da &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.9.3-beta">v0.9.3-beta&lt;/a> até a &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.13.1-beta">v0.13.1-beta&lt;/a> nesta semana. As adições de recursos incluem suporte a múltiplas contas, um modo zen de notificações para reduzir interrupções, rascunhos e posts agendados, filtros de conteúdo de segurança e um novo ícone de chama.&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>, o app privado de notas criptografadas e armazenamento de arquivos, lançou &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.2.0">v1.2.0&lt;/a> em 20 de março. O release adiciona captura de câmera diretamente do app, redimensionamento de imagem antes do upload para reduzir custos de armazenamento, e pinch-to-zoom para revisar imagens armazenadas. O Manent armazena notas e arquivos criptografados em relays Nostr usando o par de chaves do usuário, tornando o app de telefone ou desktop um cliente fino que pode reconstruir seu estado completo a partir dos dados dos relays.&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>, o cliente de vídeo short-form, lançou &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.7">1.0.7&lt;/a> em 21 de março com um watchdog de reprodução de vídeo que retoma automaticamente vídeos travados. Depois da infraestrutura de testes E2E e do carregamento direto de MP4 na &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 release mira o caminho de falha remanescente de reprodução: vídeos que param no meio do stream sem lançar erro.&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>, a extensão de navegador &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a> (Browser Extension Signer), lançou &lt;a href="https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.2">v3.14.2&lt;/a> em 18 de março com exibição de QR code de endereço Lightning e suporte a assinatura Schnorr. A adição de Schnorr alinha a extensão de navegador ao esquema de assinatura secp256k1 que o Nostr usa nativamente.&lt;/p>
&lt;h3 id="noornote-v065-até-v0611">NoorNote v0.6.5 até v0.6.11&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>, o app de anotações, lançou sete releases da &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.5">v0.6.5&lt;/a> até a &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.11">v0.6.11&lt;/a>. A principal adição é Follow Packs: conjuntos curados de contas que usuários podem navegar e seguir em massa, semelhantes às Twitter Lists, mas pensados para onboarding. Usuários podem criar, editar e compartilhar Follow Packs com títulos, descrições e imagens de capa personalizados. A série também atualiza a biblioteca Nostr subjacente de NDK v2 para v3, que traz melhor tratamento de conexão de relay e gerenciamento de subscriptions. Picture notes e uma experiência redesenhada de conexão de relay completam a sequência.&lt;/p>
&lt;h3 id="nak-v0191-e-v0192">nak v0.19.1 e v0.19.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, o toolkit de linha de comando Nostr do fiatjaf para interagir com relays, codificar e decodificar identificadores &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities), assinar eventos e consultar dados de relay, lançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a> e &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.2">v0.19.2&lt;/a> em 17 e 20 de março. Os dois point releases seguem a adição de UI de fórum de grupo da &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/">v0.19.0&lt;/a> da semana passada.&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>, o app de calendário descentralizado construído sobre &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> (Calendar Events), lançou &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.1">v0.2.1&lt;/a> em 20 de março. O release corrige um problema de template de notificação que afetava lembretes de eventos. O Calendar armazena eventos como eventos Nostr kind 31922 (baseados em data) e kind 31923 (baseados em hora), permitindo que qualquer cliente Nostr renderize dados de calendário se escolher suportar esses kinds. O app é construído pela equipe Formstr, que também mantém Formstr (formulários descentralizados) e Pollerama (enquetes).&lt;/p>
&lt;h3 id="nym-v350-até-v353">NYM v3.50 até v3.53&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">NYM&lt;/a>, o cliente leve de chat efêmero com bridge para Bitchat, lançou 28 releases de v3.50 até v3.53. O recurso mais notável é o Nymbot, um chat bot embutido que responde a menções &lt;code>@nymbot&lt;/code> em canais e fornece funções de status e gerenciamento de relay. Um &amp;ldquo;hardcore mode&amp;rdquo; gera um novo par de chaves para cada mensagem enviada, tornando threads de conversa desvinculáveis no nível de identidade. O tradeoff é claro: perde-se identidade persistente, mas ganha-se anonimato por mensagem. A camada de relay proxy também recebeu trabalho, com workers sharded de relay proxy para melhor conectividade, suporte a canais geohash e tolerância a clock skew para nós com relógios de sistema imprecisos.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="ditto-adiciona-ponte-com-bluesky-e-integração-com-wikipedia">Ditto adiciona ponte com Bluesky e integração com Wikipedia&lt;/h3>
&lt;p>&lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a>, o cliente social Nostr customizável da equipe Soapbox, registrou mais de 300 commits nesta semana em três trilhas distintas de recursos. A primeira é uma ponte com Bluesky (19 commits) que renderiza posts do Bluesky inline como threads completas ao estilo feed, adiciona navegação lateral para uma página de descoberta do Bluesky baseada no feed oficial Discover (whats-hot), e conecta botões de ação para comentar, compartilhar, reagir e copiar links. Quando um usuário responde a um post do Bluesky dentro do Ditto, o modal de composição mostra um aviso destacando a natureza cross-protocol da interação. Reações kind 17 do &lt;a href="https://nostrcompass.org/pt/topics/nip-73/">NIP-73&lt;/a> (External Content IDs) impulsionam esse modelo cross-protocol: um usuário Nostr reage a um post do Bluesky, e a reação é armazenada como um evento Nostr padrão referenciando o identificador de conteúdo externo. É o mesmo padrão NIP-73 que poderia fazer ponte de reações a qualquer conteúdo externo, de posts do Bluesky a vídeos do YouTube e páginas web.&lt;/p>
&lt;p>A segunda trilha é uma integração com Wikipedia (9 commits). O Ditto agora renderiza conteúdo rico de artigos da Wikipedia em páginas de detalhe em vez de previews genéricos de link, adiciona autocomplete de busca com thumbnails de artigo, e fornece uma página &lt;code>/wikipedia&lt;/code> puxando conteúdo em destaque da API da Wikipedia. Resultados da Wikipedia e do Archive.org também aparecem no dropdown geral de autocomplete de busca. A terceira trilha é suporte à plataforma iOS via Capacitor, com script de build remoto e configuração de plataforma chegando junto a uma reformulação de UI (55 commits) que substitui headers com backdrop blur por um novo design de navegação em arco em todas as páginas do app. Os 314 commits movem o Ditto de um cliente apenas Nostr para um agregador multiprotocolo que trata Bluesky e Wikipedia como fontes de conteúdo de primeira classe ao lado do feed Nostr.&lt;/p>
&lt;h3 id="pika-constrói-um-pipeline-de-ci-para-forge-nip-34">Pika constrói um pipeline de CI para forge NIP-34&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, o app de mensagens criptografadas baseado em Marmot, mergeou 33 PRs nesta semana focados em um forge &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> self-hosted com CI pré-merge. O forge é uma camada de hospedagem git que recebe patches como eventos NIP-34, executa verificações de CI antes do merge e reporta status estruturado de volta por eventos Nostr. O &lt;a href="https://github.com/sledtools/pika/pull/701">PR #701&lt;/a> adiciona CI pré-merge e noturna por lanes, onde cada caminho de código (Rust, TypeScript, builds Apple) roda em sua própria lane com status pass/fail independente. O &lt;a href="https://github.com/sledtools/pika/pull/715">PR #715&lt;/a> reduz agentes de CI gerenciados para containers Incus OpenClaw para isolamento, e o &lt;a href="https://github.com/sledtools/pika/pull/733">PR #733&lt;/a> adiciona um CLI &lt;code>ph forge&lt;/code> para interagir com o forge hospedado pela linha de comando. PRs de suporte tratam permissões de escrita no repositório para merges (&lt;a href="https://github.com/sledtools/pika/pull/736">PR #736&lt;/a>), metadados estruturados de CI com badges de status ao vivo (&lt;a href="https://github.com/sledtools/pika/pull/722">PR #722&lt;/a>), splits de nightly builds Apple (&lt;a href="https://github.com/sledtools/pika/pull/738">PR #738&lt;/a>), e correções de auth do forge e branch lookup (&lt;a href="https://github.com/sledtools/pika/pull/734">PR #734&lt;/a>). Este é um dos primeiros sistemas CI/CD funcionais construídos sobre eventos git NIP-34, levando a hospedagem de código-fonte baseada em Nostr além da simples troca de patches em direção ao workflow de merge e teste que desenvolvedores esperam de GitHub ou GitLab.&lt;/p>
&lt;h3 id="nostria-adiciona-comunidades-snippets-de-código-e-tratamento-de-eventos-de-voz">Nostria adiciona comunidades, snippets de código e tratamento de eventos de voz&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, o cliente Nostr multiplataforma mantido por sondreb, passou esta semana expandindo a superfície do app além da filtragem Web of Trust coberta na edição #14. A principal adição é uma implementação completa do &lt;a href="https://nostrcompass.org/pt/topics/nip-72/">NIP-72&lt;/a> (Moderated Communities) com criação de comunidade, configuração de moderadores e relays, rastreamento de aprovação de posts com previews de imagem e uma página dedicada de comunidade com abas Posts e Moderators.&lt;/p>
&lt;p>O mesmo trecho de trabalho também adiciona renderização e edição de snippets de código com um editor com syntax highlighting, suporte a resposta a eventos de voz para conversas em áudio, configurações de relay de chat para mensagens diretas, compartilhamento de canal pela Web Share API, um sistema de docking de toolbar para o media player, cadastro in-app no serviço mais recente do Brainstorm Web of Trust, fluxos de envio e recebimento de dinheiro em DMs usando NWC e invoices BOLT-11, tratamento de GIFs nativo do Nostr e um caminho mais forte de importação RSS para músicos que consegue capturar Lightning splits existentes de feeds de podcast.&lt;/p>
&lt;h3 id="nostr-vpn-em-iteração-rápida">nostr-vpn em iteração rápida&lt;/h3>
&lt;p>Além do &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostr-vpn-%c3%a9-lan%c3%a7ado-como-alternativa-ao-tailscale">lançamento inicial&lt;/a>, o log de commits do &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a> revela os problemas específicos encontrados durante deployment real. A &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.3">v0.2.3&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.5">v0.2.5&lt;/a> adicionaram o script inicial de instalação e o CLI cross-platform. A &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.6">v0.2.6&lt;/a> e a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.7">v0.2.7&lt;/a> trouxeram suporte a Windows, o que exigiu quoting de caminhos com UAC para escrita de configuração e atualizações de config pertencentes ao daemon. A &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.8">v0.2.8&lt;/a> até a &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.10">v0.2.10&lt;/a> corrigiram ações de serviço na GUI do Windows, tratamento de subprocessos do CLI e configuração de serviço no escopo da máquina. A &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.12">v0.2.12&lt;/a> substituiu descoberta LAN por timed LAN pairing, um fluxo iniciado pelo usuário em que dois dispositivos na mesma rede local se pareiam sem sinalização via relay. O padrão é típico de testes de campo em estágio inicial: cada release mira uma falha específica de deployment, a base de usuários é pequena o suficiente para iterar diariamente, e o desenvolvedor está usando a ferramenta pessoalmente entre releases.&lt;/p>
&lt;h3 id="comet-e-builds-automatizados">Comet e builds automatizados&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/comet">Comet&lt;/a> (antigo Captain&amp;rsquo;s Log), a ferramenta nativa do Nostr para escrita long-form da Nodetec, produziu mais de 40 builds alpha automatizados nesta semana. O Comet é um app desktop para escrever e publicar artigos NIP-23 (Long-form Content), com armazenamento local de rascunhos, edição Markdown e publicação com um clique para o conjunto de relays do usuário. O pipeline automatizado de builds gera um release tagueado para cada commit na branch main, o que torna a contagem bruta de releases enganosa como medida de velocidade de recursos. O que os 40 builds mostram é que o app está sob desenvolvimento ativo diário, com cada commit testado, empacotado e disponibilizado para download em minutos.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a> durante a janela de 17 a 24 de março:&lt;/p>
&lt;p>Nenhum merge de NIP ocorreu entre 18 e 24 de março.&lt;/p>
&lt;p>&lt;strong>PRs Abertos e Discussões atualizados durante a janela:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AA: Autonomous Agents on Nostr&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2259">PR #2259&lt;/a>): Propõe convenções para agentes autônomos operando na rede Nostr. O PR define como agentes se identificam, descobrem serviços e se coordenam com outros agentes e humanos por eventos Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> (Search): Extensões de ordenação&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2283">PR #2283&lt;/a>): Adiciona parâmetros de ordenação a consultas de busca NIP-50, incluindo top, hot, zaps e new. Isso permitiria que clientes solicitassem resultados ranqueados de relays com suporte a full-text search em vez de ordenar do lado do cliente.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-A5: WASM Programs&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>): Propõe uma convenção para publicar e descobrir programas WebAssembly no Nostr. Binários WASM poderiam ser distribuídos como eventos Nostr, com relays servindo como camada de descoberta para código executável portável.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-CF: Combine Forces interoperable napps&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2277">PR #2277&lt;/a>): Define uma convenção para aplicações Nostr interoperáveis (&amp;ldquo;napps&amp;rdquo;) que podem compor funcionalidades entre diferentes clientes e serviços.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Snapshots NIP&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>): Propõe um mecanismo de snapshots de estado de relay, para sincronização e backup de relays.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Checkpoints NIP&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2278">PR #2278&lt;/a>): Propõe eventos de checkpoint para marcar estado conhecido como bom de relay, complementando a proposta de snapshots.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> (Badges): Refatoração de Badge Sets&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>): Reestrutura como coleções de badges são organizadas e referenciadas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document): Extensões&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2280">PR #2280&lt;/a>): Adiciona campos extras ao relay information document para metadados de relay legíveis por máquina mais ricos.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="cinco-anos-de-marços-do-nostr">Cinco Anos de Marços do Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#five-years-of-nostr-februaries">A newsletter do mês passado&lt;/a> cobriu como os fevereiros do Nostr progrediram desde a reescrita do NIP-01 (Basic Protocol Flow), passando pela onda do Damus na App Store, até redes mesh e propostas de agentes. Esta retrospectiva traça o que aconteceu em cada março de 2021 até 2026.&lt;/p>
&lt;h3 id="março-de-2021-dois-commits">Março de 2021: Dois Commits&lt;/h3>
&lt;p>Quatro meses após sua existência, o mês de março do Nostr produziu exatamente dois commits no repositório do protocolo, ambos em 4 de março. fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/dcd8cc3">adicionou links para instâncias nostwitter&lt;/a>, apontando visitantes iniciais para deployments funcionais, e &lt;a href="https://github.com/nostr-protocol/nostr/commit/54dfb46">adicionou kind à definição básica de filtro&lt;/a>. Esse segundo commit é revelador: em março de 2021, ainda não era possível filtrar eventos Nostr por kind. O protocolo era tão primitivo assim. Dois ou três relays serviam a rede. O grupo no Telegram era o único canal de coordenação. O repositório de NIPs ainda não existia; propostas de protocolo viviam como arquivos no repositório principal do nostr. fiatjaf foi o único committer naquele mês. Toda a produção de março de 2021 daquilo que se tornaria um protocolo suportando VPNs, jogos multiplayer e redes mesh cinco anos depois cabe em um único git diff.&lt;/p>
&lt;h3 id="março-de-2022-construção-pré-damus">Março de 2022: Construção pré-Damus&lt;/h3>
&lt;p>O repositório principal do protocolo recebeu zero commits em março de 2022. O desenvolvimento havia migrado inteiramente para repositórios de ferramentas. &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, o cliente web em Vue.js do fiatjaf e na época a principal interface Nostr, recebeu 5 commits incluindo suporte a deployment com Docker e correções de display name &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> (DNS-Based Verification) que removiam o prefixo &lt;code>_@&lt;/code> dos badges de verificação. O &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a> de Robert C. Martin, o cliente desktop em Clojure, registrou 13 ou mais commits adicionando threading, navegação por teclado e uma janela de edição. O autor de software mais famoso construindo ativamente sobre Nostr naquele mês não era um desenvolvedor cripto, mas a pessoa cujo &amp;ldquo;Clean Code&amp;rdquo; vendeu milhões de cópias, escrevendo um cliente Nostr em Clojure, uma escolha de linguagem que diz tudo sobre a comunidade inicial: eram programadores opinativos construindo para si mesmos.&lt;/p>
&lt;p>A rede de relays havia se expandido para cerca de 15 relays com uma base ativa de usuários na casa das centenas. O Damus ainda não existia e só seria criado em abril de 2022. O Nostream também ainda não havia aparecido. O trabalho do mês foi infraestrutura: tornar as ferramentas existentes mais confiáveis para a pequena comunidade que já as usava diariamente.&lt;/p>
&lt;h3 id="março-de-2023-infraestrutura-pós-explosão">Março de 2023: Infraestrutura pós-explosão&lt;/h3>
&lt;p>Um mês após a onda do Damus na App Store e o salto acima de 300.000 chaves públicas, março de 2023 foi sobre absorver o crescimento. O &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a> mergeou 28 pull requests, a segunda maior contagem mensal da história do protocolo. &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a> (Lists) foi mergeado, dando aos clientes coleções estruturadas de follows, mutes e bookmarks. &lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> (External Identities in Profiles) chegou, o NIP-78 (Application-Specific Data) forneceu um kind de armazenamento de propósito geral para apps que precisavam de estado privado, e uma reescrita do &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps) (&lt;a href="https://github.com/nostr-protocol/nips/pull/392">PR #392&lt;/a>) consolidou o fluxo de zap e clarificou a terminologia. O PR mais discutido do mês foi uma proposta alternativa de tratamento de mentions (&lt;a href="https://github.com/nostr-protocol/nips/pull/381">PR #381&lt;/a>) com mais de 50 comentários.&lt;/p>
&lt;p>O novo projeto mais consequente foi o &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> (Nostr Development Kit), a biblioteca TypeScript para conexões de relay, assinatura de eventos, cache e gerenciamento de subscriptions. pablof7z fez o &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/09e5e03">commit inicial&lt;/a> em 16 de março de 2023, depois o reescreveu do zero 11 dias depois em 27 de março (&amp;ldquo;basically another initial commit&amp;rdquo;), e já tinha suporte a LNURL e zap funcionando até 31 de março. O NDK saiu do zero para suportar zaps em 15 dias. Cinco dias após a criação do NDK, em 21 de março, a equipe do Alby criou o &lt;a href="https://github.com/getAlby/nostr-wallet-connect">NWC&lt;/a> (Nostr Wallet Connect), a implementação de referência do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> que conectava carteiras Lightning a aplicações Nostr. Os dois projetos que sustentariam os três anos seguintes de desenvolvimento Nostr baseado na web nasceram na mesma janela de 30 dias. A OpenSats ainda não havia lançado seu fundo Nostr; a primeira onda só viria em &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">julho de 2023&lt;/a>, quatro meses após a criação do NDK.&lt;/p>
&lt;p>Outras criações notáveis naquele mês incluíram NostrGit, NostrChat, um projeto nostr-signing-device da LNbits e nostrmo. &lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a>, o cliente desktop em Rust focado em seleção inteligente de relay, lançou três releases. O protocolo estava em modo de construção, e as ferramentas criadas em março de 2023 ainda estão em uso três anos depois.&lt;/p>
&lt;h3 id="março-de-2024-maturação-do-protocolo">Março de 2024: Maturação do protocolo&lt;/h3>
&lt;p>Março de 2024 foi sobre endurecer o protocolo para uso de longo prazo. O repositório de NIPs mergeou 12 pull requests. A mais significativa foi &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a> (Git Stuff), &lt;a href="https://github.com/nostr-protocol/nips/pull/997">PR #997&lt;/a>, mergeada em 5 de março após mais de 130 comentários e 44 dias de review. A thread de discussão é uma cápsula do tempo da comunidade debatendo como construir um GitHub descentralizado. jb55 traçou paralelos com &lt;code>git send-email&lt;/code>, Giszmo propôs usar hashes de root commit para descoberta entre forks (&amp;ldquo;something GitHub doesn&amp;rsquo;t do and we could&amp;rdquo;), mikedilger sugeriu autenticação assinada por evento &lt;a href="https://nostrcompass.org/pt/topics/nip-98/">NIP-98&lt;/a> (HTTP Auth) em vez de chaves SSH, e fiatjaf descartou sem rodeios a necessidade de generalidade para controle de versão: &amp;ldquo;not for each version control system, just for git. No one uses the others.&amp;rdquo; Em poucas horas após abrir o PR, fiatjaf já havia ajustado nak, go-nostr e gitstr para aceitar patches sobre Nostr. DanConwayDev, cujo ngit já era bolsista da OpenSats, esteve entre os contribuidores mais ativos da discussão. Um campo de bot para metadados de perfil também foi mergeado, dando aos clientes uma forma legível por máquina de distinguir contas automatizadas de humanas.&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lançou v0.85.0 com suporte a eventos git, artigos wiki, renderização de dados médicos e edição de conteúdo em um único release. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> chegou à v0.10.0. &lt;a href="https://github.com/Spl0itable/nosflare">Nosflare&lt;/a>, um relay Nostr serverless rodando em Cloudflare Workers, provou que lógica de relay pode rodar na edge. A OpenSats emitiu uma &lt;a href="https://opensats.org/blog/bruno-garcia-receives-lts-grant">bolsa Long-Term Support para Bruno Garcia&lt;/a> por contribuições sustentadas ao cliente Amethyst.&lt;/p>
&lt;h3 id="março-de-2025-expansão-de-infraestrutura">Março de 2025: Expansão de infraestrutura&lt;/h3>
&lt;p>Março de 2025 produziu 10 NIPs mergeados. O destaque foi &lt;a href="https://nostrcompass.org/pt/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>, mergeado em 3 de março após uma jornada de 25 meses. dskvr primeiro propôs monitoramento de relays em fevereiro de 2023, ouviu que isso poderia ser feito do lado do cliente, explicou por que conectar-se a milhares de relays ao mesmo tempo era impraticável para clientes individuais, passou por sete drafts completos, construiu nós de monitoramento em oito regiões geográficas (Nordeste dos EUA, Brasil, Oeste dos EUA, Leste dos EUA, Austrália, Índia, Coreia e África do Sul) e esperou o ferramental de relay amadurecer. Quando foi mergeado, implementações já existiam em nostr.watch, relaypag.es, monitorlizard, Snort, noStrudel e Jumble. Os dados do NIP-66 depois alimentariam os benchmarks outbox da Nostrability &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#outbox-model-under-the-microscope">cobertos na Newsletter #12&lt;/a>. O NIP-C0 (Code Snippets) também foi mergeado (&lt;a href="https://github.com/nostr-protocol/nips/pull/1852">PR #1852&lt;/a>, 63 comentários), adicionando eventos kind 1337 para compartilhamento de código-fonte.&lt;/p>
&lt;p>Os primeiros servidores MCP para Nostr apareceram nesse mês. &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">nostr-mcp-server&lt;/a> apareceu em 23 de março e &lt;a href="https://github.com/getAlby/nwc-mcp-server">nwc-mcp-server&lt;/a> em 14 de março, apenas quatro meses após a Anthropic anunciar o Model Context Protocol em novembro de 2024. Essas pontes iniciais precederam o SDK completo &lt;a href="https://nostrcompass.org/pt/topics/contextvm/">ContextVM&lt;/a> e o trabalho posterior de comércio de agentes no fim de 2025 e início de 2026.&lt;/p>
&lt;p>&lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a> lançou v0.14.0. &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>, o cliente web do hodlbod com gerenciamento de feed sensível a relays, lançou três releases. A OpenSats anunciou sua &lt;a href="https://opensats.org/blog/10th-wave-of-nostr-grants">décima onda de bolsas Nostr&lt;/a>, continuando a linha de financiamento que vinha desde meados de 2023.&lt;/p>
&lt;h3 id="março-de-2026-convergência">Março de 2026: Convergência&lt;/h3>
&lt;p>&lt;em>A atividade de março de 2026 é extraída das edições do Nostr Compass &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/">#12&lt;/a> até &lt;a href="">#15&lt;/a> (esta edição).&lt;/em>&lt;/p>
&lt;p>Março de 2026 é o mês em que linhas antes separadas convergiram em sistemas funcionais. O &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#marmot-development-kit-ships-first-public-release">Marmot Development Kit&lt;/a> lançou sua primeira versão pública com mídia criptografada, bindings multi-linguagem e uma migração para ChaCha20-Poly1305 que exigiu atualizações coordenadas entre spec, Rust e TypeScript. &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#shopstr-and-milk-market-open-mcp-commerce-surfaces">Shopstr e Milk Market&lt;/a> adicionaram superfícies de comércio MCP para compras dirigidas por agentes. O relay auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> chegou simultaneamente em &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 e OAuth Bunker, fechando o loop entre software de signer, relay e bunker. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">Notedeck&lt;/a> lançou atualizações de software nativas do Nostr usando eventos de release &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> (File Metadata).&lt;/p>
&lt;p>Nesta semana, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#bigbrotr-mapeia-chaves-privadas-expostas-na-rede-de-relays">BigBrotr&lt;/a> escaneou a rede completa de relays em busca de chaves privadas vazadas e publicou tanto a análise quanto um verificador DVM. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#nostr-vpn-%c3%a9-lan%c3%a7ado-como-alternativa-ao-tailscale">Nostr VPN&lt;/a> provou que o modelo de chaves do Nostr funciona para infraestrutura de rede, não apenas para mídia social. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#doom-open-source-roda-peer-to-peer-sobre-o-nostr">DOOM&lt;/a> demonstrou que descoberta via Nostr, criptografia Marmot e transporte QUIC podem rodar um jogo multiplayer em tempo real. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#amber-v500-e-v501">Amber&lt;/a> saltou para v5.0.0. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-25-newsletter/#wisp-lan%c3%a7a-16-releases-em-uma-semana">Wisp&lt;/a> lançou 16 releases em sete dias. Vinte e cinco ou mais releases tagueados vieram de projetos importantes em uma única semana.&lt;/p>
&lt;p>Sete NIPs foram mergeados nos primeiros 24 dias do mês. O protocolo adicionou marcação Djot ao &lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a> (Wiki), limites de entrada ao &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities), lógica booleana de consulta ao &lt;a href="https://nostrcompass.org/pt/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters), e assertions de Web of Trust ao &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). Propostas abertas iam de agentes autônomos (NIP-AA) a programas WASM (NIP-A5) e extensões de ordenação de busca para &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>.&lt;/p>
&lt;h3 id="olhando-para-frente">Olhando para frente&lt;/h3>
&lt;p>Cinco marços do Nostr traçam um arco claro. Em 2021, uma pessoa fez dois commits em um protocolo que ainda não conseguia filtrar eventos por kind. Em 2023, NDK e NWC nasceram com cinco dias de diferença para absorver a explosão pós-Damus. Em 2024, uma thread de PR com 141 comentários debateu como colaboração git deveria funcionar sobre um protocolo social. Em 2025, uma spec de monitoramento de relays que havia sido pacientemente reescrita sete vezes ao longo de 25 meses finalmente foi mergeada. Em 2026, alguém se irritou com o fato de o Tailscale exigir conta e construiu uma VPN usando pares de chaves Nostr, enquanto outra pessoa lançou DOOM multiplayer que descobre pares por relays Nostr e criptografa a jogabilidade com Marmot. O escaneamento de 41 milhões de eventos em 1.085 relays pelo BigBrotr dá uma medida concreta de quanto a rede cresceu. A área de superfície do protocolo em março de 2026 seria irreconhecível para março de 2021, mas o modelo subjacente, eventos assinados por chaves secp256k1 e distribuídos por relays, não mudou.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Construindo algo ou tem novidades para compartilhar? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #14</title><link>https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-03-18-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> implementa suporte completo aos métodos do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect), &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> adiciona suporte a múltiplos relays na &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> lança &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> com Tor embutido e permissões de assinatura mais granulares, e &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> remove um caminho arriscado de keysend NWC no &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> lança um atualizador assinado na &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> que descobre releases através de eventos &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> (File Metadata), enquanto &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> corrige estado obsoleto do &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata), &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> revisa seus resultados de benchmark com dados corrigidos, e &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> testa assinaturas diretas de relay para DMs. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lança &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> lança &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> continua refinando a interoperabilidade Marmot na &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 seu runtime na &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>, e &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> adiciona filtragem Web of Trust via &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). O repositório de NIPs mergeia a marcação Djot do &lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a> (Wiki) e um limite de entrada de 5000 caracteres para &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities).&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> implementa suporte completo aos métodos do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect), &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> adiciona suporte a múltiplos relays na &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> lança &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> com Tor embutido e permissões de assinatura mais granulares, e &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> remove um caminho arriscado de keysend NWC no &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> lança um atualizador assinado na &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> que descobre releases através de eventos &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> (File Metadata), enquanto &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> corrige estado obsoleto do &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata), &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> revisa seus resultados de benchmark com dados corrigidos, e &lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> testa assinaturas diretas de relay para DMs. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> lança &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> lança &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> continua refinando a interoperabilidade Marmot na &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 seu runtime na &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a>, e &lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> adiciona filtragem Web of Trust via &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions). O repositório de NIPs mergeia a marcação Djot do &lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a> (Wiki) e um limite de entrada de 5000 caracteres para &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities).&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="suporte-a-wallet-connect-se-amplia-e-clientes-de-carteira-reforçam-caminhos-de-falha">Suporte a Wallet Connect se amplia, e clientes de carteira reforçam caminhos de falha&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android mantido por vitorpamplona, mergeou o &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1828">PR #1828&lt;/a>, que aproxima sua implementação do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> da cobertura completa do protocolo. O patch adiciona &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, suporte a keysend com registros TLV, descoberta de capacidades via kind &lt;code>13194&lt;/code>, e eventos de notificação no kind &lt;code>23197&lt;/code> com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads). Isso dá ao cliente uma superfície NWC muito mais ampla sem depender de extensões específicas de app.&lt;/p>
&lt;p>A stack de carteiras ao redor se moveu na mesma direção. &lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>, o nó Lightning auto-custodial e serviço de carteira por trás de muitos deployments NWC, lançou &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a> com suporte a múltiplos relays e fluxos de conexão e swap simplificados. &lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>, a carteira Lightning mobile, mergeou o &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a> removendo suporte a keysend NWC após identificar um caminho silencioso de drenagem de fundos nesse fluxo, enquanto também corrigiu tratamento de eventos pendentes e atividade Cashu. A conectividade de carteira no Nostr está ficando mais ampla, e implementadores estão removendo fluxos difíceis de proteger.&lt;/p>
&lt;h3 id="notedeck-move-descoberta-de-releases-para-o-nostr">Notedeck move descoberta de releases para o Nostr&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Seguindo a cobertura do Notedeck da semana passada&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop nativo da equipe Damus, lançou &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> após mergear o &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a>. O novo atualizador se inscreve em eventos de release kind &lt;code>1063&lt;/code> assinados, identifica a plataforma local, baixa o binário referenciado e verifica o hash SHA256 antes da instalação. Metadados de release não precisam mais vir da API do GitHub ou de um site do projeto. Uma pubkey de release confiável e uma conexão de relay são suficientes.&lt;/p>
&lt;p>O mesmo patch adiciona um CLI &lt;code>notedeck-release&lt;/code> que publica esses eventos a partir de artefatos de release do GitHub, o que significa que o pipeline de release agora tem um caminho de publicação nativo do Nostr assim como um caminho de descoberta nativo do Nostr. Isso também aproxima o modelo de atualizador do Damus e Notedeck do fluxo de release assinado publicado via relay da Zapstore: o ferramental &lt;code>zsp&lt;/code> da Zapstore já trata ativos de software como eventos kind &lt;code>1063&lt;/code> ou &lt;code>3063&lt;/code>, então esse caminho não está limitado a um único cliente ou publicador. O restante do release candidate é trabalho prático de desktop, colunas de follows, &amp;ldquo;View As User&amp;rdquo; de perfil, suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap), estatísticas de notas em tempo real e tratamento de limitações do &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document), mas o atualizador é a parte que provavelmente vai durar além deste ciclo de release.&lt;/p>
&lt;h3 id="estado-de-relay-se-aproxima-do-comportamento-em-tempo-de-execução">Estado de relay se aproxima do comportamento em tempo de execução&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> mergeou o &lt;a href="https://github.com/damus-io/damus/pull/3665">PR #3665&lt;/a>, substituindo um ID de evento de lista de relays armazenado obsoleto por uma consulta direta ao banco de dados para o evento kind &lt;code>10002&lt;/code> mais recente. Quando o valor antigo ficava obsoleto, operações de adicionar e remover relay podiam recorrer a listas bootstrap ou de um ano atrás, o que fazia algumas mudanças de relay parecerem bem-sucedidas enquanto deixavam o estado ativo inalterado. O &lt;a href="https://github.com/damus-io/damus/pull/3690">PR #3690&lt;/a> corrige um segundo caminho de falha deletando estado &lt;code>lock.mdb&lt;/code> obsoleto durante compactação LMDB para que o app não quebre com &lt;code>SIGBUS&lt;/code> no próximo lançamento.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> abriu o &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/194">PR #194&lt;/a>, que se inscreve diretamente nos relays de escrita &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) de um parceiro de chat enquanto uma conversa está aberta, mantendo o servidor de cache como fallback. &lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> abriu o &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>, que combina pontuação randomizada de relay, filtragem de atividade &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> do nostr.watch e Thompson sampling para mudar a seleção de relay de uma heurística fixa para uma política aprendida. Clientes há tempos tratam a escolha de relay como dados de configuração. Mais apps agora a tratam como estado vivo que precisa de lógica de medição e reparo.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&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>, o cliente Android do Primal, lançou &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a> com um novo ciclo de enquetes e carteira. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/945">PR #945&lt;/a> adiciona votação em enquetes baseada em zap, o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/948">PR #948&lt;/a> pagina o carregamento de votos para que enquetes maiores continuem usáveis, e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/965">PR #965&lt;/a> busca recibos de zap para todas as transações. O mesmo lançamento também marca eventos suportados com metadados de cliente &lt;a href="https://nostrcompass.org/pt/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers) no &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/968">PR #968&lt;/a>, o que ajuda clientes downstream a atribuir origens de eventos de forma mais limpa.&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/">Seguindo a cobertura do Amber da semana passada&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o app assinador Android para fluxos &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application), lançou &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>. O lançamento se baseia em seu recente trabalho de relay-auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> com mais endurecimento operacional: o &lt;a href="https://github.com/greenart7c3/Amber/pull/327">PR #327&lt;/a> adiciona Tor embutido junto com suporte Orbot, o &lt;a href="https://github.com/greenart7c3/Amber/pull/324">PR #324&lt;/a> substitui permissões de criptografia grosseiras baseadas em NIP por regras específicas por tipo de conteúdo, e o &lt;a href="https://github.com/greenart7c3/Amber/pull/336">PR #336&lt;/a> remove permissões de rede do flavor offline enquanto o &lt;a href="https://github.com/greenart7c3/Amber/pull/335">PR #335&lt;/a> adiciona verificações de CI para mantê-lo assim. O &lt;a href="https://github.com/greenart7c3/Amber/pull/322">PR #322&lt;/a> também move o armazenamento de PIN para DataStore criptografado.&lt;/p>
&lt;p>Este lançamento reforça a fronteira do próprio assinador. Isso é útil para qualquer fluxo Android que entregue chaves reais ou decisões de relay-auth ao Amber, porque a parte difícil não é apenas o que o assinador pode fazer. É também quão estreitamente ele pode ser limitado.&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/">Seguindo a cobertura do Route96 da semana passada&lt;/a>, &lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, o servidor de mídia que suporta Blossom e &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> (HTTP File Storage), lançou &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>. O lançamento move configuração e estado de whitelist para o banco de dados com hot reload e adiciona políticas de retenção para arquivos antigos ou frios. Também adiciona um endpoint &lt;code>GET /user/files&lt;/code> mais rico além de rastreamento de file-stat para downloads e egress, o que dá aos operadores mais visibilidade sobre como seu servidor de armazenamento está sendo usado.&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/">Seguindo a cobertura do OpenChat da semana passada&lt;/a>, &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, o cliente de chat baseado em Avalonia construído sobre a stack Marmot, lançou &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a> após uma semana de trabalho rápido de protocolo. O &lt;a href="https://github.com/DavidGershony/openChat/commit/c33895d6b1a198f01b9b01a7be974bdce033fb9c">commit c33895d&lt;/a> encapsula eventos Welcome em gift wrap &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> e remove shims antigos de normalização de tags MIP-00, o &lt;a href="https://github.com/DavidGershony/openChat/commit/2738ff428154f60f50debb8f2a53662d427b28f1">commit 2738ff4&lt;/a> completa a auditoria de conformidade MIP-02, e o &lt;a href="https://github.com/DavidGershony/openChat/commit/8e470cf7945bced010168c8229d73d67db638b9f">commit 8e470cf&lt;/a> faz o mesmo para criptografia de mensagem de grupo MIP-03. O &lt;a href="https://github.com/DavidGershony/openChat/commit/129ca37e264efaa2d1a8b04fe95cd72e5e212547">commit 129ca37&lt;/a> também consolida o tratamento NIP-44 na implementação compartilhada do marmot-cs, reduzindo o risco de drift de cripto do lado do cliente.&lt;/p>
&lt;h3 id="nak-v0190-e-v0191">nak v0.19.0 e v0.19.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>, o toolkit de linha de comando Nostr do fiatjaf, lançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.0">v0.19.0&lt;/a> e &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a>. A série 0.19 adiciona uma interface de fórum de grupo no &lt;a href="https://github.com/fiatjaf/nak/commit/5f4efdbc69a36fc80ea3f97b2cdee1db6a7c5b47">commit 5f4efdb&lt;/a>, muda edições de metadados de grupo para um fluxo de substituição completa no &lt;a href="https://github.com/fiatjaf/nak/commit/da0b75337198010687aceb6a07bbae67407faee3">commit da0b753&lt;/a>, e substitui o antigo tratamento &lt;code>no-text&lt;/code> por &lt;code>supported_kinds&lt;/code> no &lt;a href="https://github.com/fiatjaf/nak/commit/bef67d35d259e0450debf0fd870e1a937a2406bf">commit bef67d3&lt;/a>. Para implementadores de grupos, isso mantém o CLI alinhado com a direção que specs e clientes de grupo estão seguindo.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">Seguindo a cobertura do Amethyst da semana passada&lt;/a>, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android com uma das mais amplas superfícies de protocolo no Nostr, continuou construindo sobre seu trabalho de carteira e relay após o patch NIP-47. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1853">PR #1853&lt;/a> adiciona consultas COUNT do &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a> (Event Counting) nas telas de gerenciamento de relay, para que usuários possam ver quantos eventos cada relay realmente mantém para feed principal, notificações, DMs e dados de índice. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1849">PR #1849&lt;/a> adiciona uploads de arquivos criptografados para chats &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), com um caminho de retry para uploads não criptografados quando um host de armazenamento rejeita a versão criptografada.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1791">PR #1791&lt;/a> também traz login completo de bunker desktop &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) com um indicador de heartbeat, o que importa porque falhas de assinatura remota frequentemente parecem quebras aleatórias de UI do lado do usuário. O cliente mostra se o assinador está vivo e quão recentemente ele respondeu, enquanto também torna óbvio quando a sessão atual usa um bunker.&lt;/p>
&lt;h3 id="nostria">Nostria&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, o cliente multiplataforma construído em torno de uma stack local-first, mergeou o &lt;a href="https://github.com/nostria-app/nostria/pull/561">PR #561&lt;/a> adicionando filtragem Web of Trust para feeds e respostas de threads. O recurso usa os dados de rank do serviço de confiança existente e os expõe como filtro de feed e filtro de respostas, ocultando autores cujo rank não alcança o limiar enquanto preserva a estrutura da thread quando descendentes confiáveis estão presentes. Isso dá aos usuários uma camada intermediária entre &amp;ldquo;mostrar todos&amp;rdquo; e curadoria baseada em listas hardcoded.&lt;/p>
&lt;p>A mesma semana também trouxe o &lt;a href="https://github.com/nostria-app/nostria/pull/563">PR #563&lt;/a>, que adiciona filtragem de conteúdo e suporte a repost na página de resumo. Fora da lista de PRs rastreados, Nostria também tem preenchido mais de sua superfície para power users. Agora suporta o mais recente serviço Brainstorm Web of Trust com cadastro in-app, junto com fluxos de enviar e receber dinheiro em DMs usando NWC e invoices BOLT-11. Também adiciona tratamento de GIFs nativos do Nostr através do NIP de emoji e um caminho mais robusto de importação RSS para músicos que pode capturar splits Lightning existentes de feeds de podcast. Nostria está tratando ranking, mídia, pagamentos e publicação como uma superfície 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>, o cliente iOS mantido por nostur-com, abriu o &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a> para mudar o roteamento outbox de um plano fixo para uma política pontuada. O patch adiciona pontuação randomizada de relay, filtragem de atividade de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> com um feed cacheado do nostr.watch, e Thompson sampling para que dados de sucesso e falha de relay mudem seleções futuras. O design mantém uma válvula de segurança quando muitos relays seriam filtrados e preserva relays &lt;code>.onion&lt;/code>. Este é um dos exemplos atuais mais claros de um cliente tratando seleção de relay como um sistema adaptativo.&lt;/p>
&lt;h3 id="nostrability-outbox">Nostrability Outbox&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/">Seguindo o relatório de benchmark Outbox anterior&lt;/a>, &lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>, o projeto de benchmark e análise focado no roteamento de clientes &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a>, passou a semana refinando suas próprias afirmações. O &lt;a href="https://github.com/nostrability/outbox/pull/35">PR #35&lt;/a> substitui resultados inflados de Thompson sampling por um re-benchmark completo em 1.511 execuções e recomenda a variante &lt;code>CG3&lt;/code> para roteamento estilo NDK. O &lt;a href="https://github.com/nostrability/outbox/pull/43">PR #43&lt;/a> adiciona comparações de decay e caso de uso, corrige um bug de envenenamento de cache de &lt;code>0 follows&lt;/code>, e re-executa o dataset Telluride após fixar TTLs de cache.&lt;/p>
&lt;p>Isso não é trabalho de produto no sentido usual, mas importa para autores de clientes porque os números do projeto agora são mais precisos e menos lisonjeiros nos lugares onde haviam sobreclamado anteriormente. O resultado corrigido ainda é útil. Seleção randomizada continua superando roteamento puramente determinístico nos casos que o Outbox se preocupa, aprendizado estilo Thompson pode melhorar materialmente a cobertura quando clientes persistem histórico útil de relay, e filtragem de atividade &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> elimina tempo desperdiçado em relays mortos. O trabalho também está se transformando em propostas concretas de implementação, incluindo &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>, e &lt;a href="https://github.com/hzrd149/applesauce/pull/54">applesauce #54&lt;/a> mais &lt;a href="https://github.com/hzrd149/applesauce/pull/55">applesauce #55&lt;/a>.&lt;/p>
&lt;h3 id="backend-do-white-noise">Backend do White Noise&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>, o backend Rust usado pelo White Noise e outros ferramentais Marmot, mergeou dois patches de endurecimento de fronteira em torno do tratamento de mídia Blossom. O &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/637">PR #637&lt;/a> impõe HTTPS em URLs Blossom e adiciona um timeout de upload, enquanto o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/642">PR #642&lt;/a> limita downloads de blob a &lt;code>100 MiB&lt;/code> para bloquear pulls de mídia superdimensionados de se transformarem em um caminho de negação de serviço. Para software de mensagens privadas, URLs de mídia são uma das interfaces mais afiadas entre lógica de aplicação criptografada e infraestrutura de rede não confiável. Esta semana a equipe reforçou essa borda.&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>, a biblioteca de protocolo Rust, mergeou o &lt;a href="https://github.com/rust-nostr/nostr/pull/1280">PR #1280&lt;/a> adicionando construtores de conveniência para &lt;code>LocalRelayBuilderNip42&lt;/code>. Os novos helpers de leitura e escrita dão a setups de relay embutido e teste uma forma mais clara de transformar política de auth &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> em código. Este é um pequeno patch de biblioteca, mas importa para equipes construindo relays locais ou empacotados em apps que precisam de auth habilitado sem repetir boilerplate toda vez.&lt;/p>
&lt;h3 id="pika">Pika&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/">Seguindo a cobertura anterior do Pika&lt;/a>, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, o app de mensagens baseado em Marmot, lançou &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a> e &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v1.1.1">pikachat-v1.1.1&lt;/a> com um ciclo de release focado em convergência de runtime. O &lt;a href="https://github.com/sledtools/pika/pull/542">PR #542&lt;/a> introduz uma fachada de runtime Marmot compartilhada para o CLI e sidecar, com o host do app migrando para a mesma superfície. O &lt;a href="https://github.com/sledtools/pika/pull/556">PR #556&lt;/a> reforça o ciclo de vida do agente OpenClaw e estado de provisionamento, enquanto o &lt;a href="https://github.com/sledtools/pika/pull/600">PR #600&lt;/a> adiciona restauração de backup e segurança de recuperação mais rígida para ambientes gerenciados.&lt;/p>
&lt;p>A superfície diretamente voltada ao usuário aqui é menor que no último writeup do Pika, mas a mudança arquitetural é significativa. Puxar lógica de grupo, mídia, chamada e sessão para trás de um runtime compartilhado reduz a chance do app e daemon divergirem conforme a stack Marmot cresce.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a> (Wiki): Troca de Asciidoc para Djot&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>): Conteúdo wiki no kind &lt;code>30818&lt;/code> agora usa Djot como formato de marcação canônico. O texto mergeado adiciona comportamento explícito de wikilink, exemplos de merge-request para kind &lt;code>818&lt;/code>, exemplos de redirecionamento para kind &lt;code>30819&lt;/code>, e exemplos de normalização não-latina para tags &lt;code>d&lt;/code>. Isso dá aos implementadores um alvo de parsing mais limpo que Asciidoc e remove mais um caminho de spec que dependia de um toolchain centrado em Ruby.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> (Bech32-Encoded Entities): Adiciona limite de entrada&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2264">PR #2264&lt;/a>): A spec agora recomenda limitar strings de entidades codificadas em Bech32 a 5000 caracteres. Esta é uma mudança pequena com valor real para parsers, porque strings NIP-19 agora aparecem em fluxos QR, deep links, share sheets e entrada colada por usuários em muitos clientes.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Arquivo de Chave Nostr para &lt;a href="https://nostrcompass.org/pt/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>): Propõe um formato de arquivo &lt;code>.nostrkey&lt;/code> para exportação e importação de chaves criptografadas por senha. Se mergeado, daria aos clientes um caminho de backup baseado em arquivo mais normal do que copiar strings &lt;code>ncryptsec&lt;/code> brutas por aí.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Consistência de estado de membros para &lt;a href="https://nostrcompass.org/pt/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>): Adiciona uma seção clarificando que relays devem manter um estado de membros autoritativo por pubkey. Isso simplificaria a lógica de clientes de grupo em torno de mudanças de membros e histórico replicado.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Orientação de exclusão para &lt;a href="https://nostrcompass.org/pt/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>): Propõe um caminho concreto para edição e exclusão de mensagens privadas através de eventos de exclusão encapsulados em gift wrap. O trabalho ainda está aberto, mas autores de clientes precisam de uma resposta aqui se NIP-17 vai substituir completamente os fluxos de DM mais antigos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>URI de share-intent para &lt;a href="https://nostrcompass.org/pt/topics/nip-222/">NIP-222&lt;/a>&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2266">PR #2266&lt;/a>): O rascunho padronizaria como apps mobile e desktop entregam conteúdo compartilhado para um cliente Nostr. Essa é uma das bordas de interoperabilidade mais ásperas nos fluxos atuais de app para 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/pt/topics/nip-94/">NIP-94&lt;/a> define kind &lt;code>1063&lt;/code> como um evento de metadados de primeira classe para um arquivo. A &lt;a href="https://github.com/nostr-protocol/nips/blob/master/94.md">especificação&lt;/a> dá ao evento seu próprio &lt;code>content&lt;/code> legível por humanos mais tags legíveis por máquina para URL de download, tipo MIME, hashes, dimensões, previews, fallbacks e dicas de serviço de armazenamento. Isso importa porque o arquivo se torna consultável nos relays como seu próprio objeto. Um cliente não precisa extrair metadados do conteúdo circundante para entender o que o arquivo é.&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>As tags fazem mais trabalho do que aparentam à primeira vista. &lt;code>x&lt;/code> identifica o arquivo servido, enquanto &lt;code>ox&lt;/code> identifica o arquivo original antes de qualquer transformação do lado do servidor. As tags de preview permitem que clientes construam índices de arquivos navegáveis sem baixar o ativo completo, e &lt;code>summary&lt;/code> pode carregar um excerto curto ao lado deles. &lt;code>fallback&lt;/code> dá uma segunda fonte quando a URL principal falha, e &lt;code>service&lt;/code> indica o protocolo de armazenamento por trás do arquivo, como &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> ou outro host. NIP-94 portanto fica abaixo de postagem social e acima de armazenamento bruto. Ele descreve o arquivo, não a conversa em torno do arquivo.&lt;/p>
&lt;p>É por isso que o atualizador do Notedeck desta semana é interessante. O &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a> usa eventos kind &lt;code>1063&lt;/code> assinados para descoberta de releases de software, e então verifica o binário baixado contra o SHA256 publicado. O mesmo formato de evento pode descrever um artefato de software ou um upload de mídia. NIP-94 é antigo o suficiente para ser estável, mas ainda tem espaço para crescer porque mais projetos estão tratando eventos de metadados como um transporte para máquinas, não apenas como decoração para pessoas.&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/pt/topics/nip-54/">NIP-54&lt;/a> define kind &lt;code>30818&lt;/code> como um evento de artigo wiki. A &lt;a href="https://github.com/nostr-protocol/nips/blob/master/54.md">especificação&lt;/a> trata a tag &lt;code>d&lt;/code> como o tópico normalizado do artigo e permite que muitos autores publiquem entradas para o mesmo assunto. O corpo do artigo vive no &lt;code>content&lt;/code>, enquanto tags tratam de identidade normalizada, título de exibição, resumos e referências a versões anteriores. Isso significa que NIP-54 não é apenas um formato de conteúdo. É também um problema de recuperação e ranking, porque cada cliente ainda precisa decidir qual versão do artigo 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>O merge desta semana muda a marcação canônica de Asciidoc para Djot no &lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>. Isso importa para implementadores porque Djot tem uma spec standalone mais precisa e uma história de parser mais simples entre linguagens. O texto mergeado também clarifica como wikilinks por referência resolvem, como merge requests usam kind &lt;code>818&lt;/code>, como redirecionamentos usam kind &lt;code>30819&lt;/code>, e como a normalização da tag &lt;code>d&lt;/code> deve se comportar para scripts não-latinos. Essas são as partes que fazem dois clientes independentes concordarem sobre para qual artigo um link aponta.&lt;/p>
&lt;p>NIP-54 também ocupa um lugar incomum no protocolo. Um cliente wiki precisa de renderização de conteúdo, mas também precisa de política de ranking. Reações, listas de relay, listas de contatos e sinais explícitos de deferência todos alimentam qual artigo vence para um dado tópico. A troca para Djot não resolve esse problema de ranking, mas remove uma das ambiguidades de parser que estava por baixo dele. É por isso que o merge importa agora: a mudança é menos sobre formatação de prosa mais bonita e mais sobre tornar o comportamento wiki multi-cliente mais fácil de implementar consistentemente.&lt;/p>
&lt;p>Construindo algo, ou quer que cubram? Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> DM no Nostr em &lt;code>npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&lt;/code>.&lt;/p></content:encoded></item><item><title>Nostr Compass #13</title><link>https://nostrcompass.org/pt/newsletters/2026-03-11-newsletter/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-03-11-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> e &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> adicionam superfícies MCP para comércio orientado por agentes, enquanto &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> e &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> adicionam suporte a relay auth da &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> (Authentication of Clients to Relays) e eventos protegidos em software de app, signer e relay. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> lança duas versões focadas em rotulagem de IA, filas de moderação, perceptual hashing e documentação de servidor legível por máquina. &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>, já disponível na web, lançou seu primeiro alpha para Android e depois adicionou suporte de signer da &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application). &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> adiciona cadastro via &lt;a href="https://nostrcompass.org/pt/topics/nip-49/">NIP-49&lt;/a> (Private Key Encryption), &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança trabalho de resolução &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> (Domain Verification) baseado em Namecoin, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lança a &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>, e o repositório de NIPs faz merge da &lt;a href="https://nostrcompass.org/pt/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters) e de orientações defensivas para a &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring).&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> e &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> adicionam superfícies MCP para comércio orientado por agentes, enquanto &lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> e &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> adicionam suporte a relay auth da &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> (Authentication of Clients to Relays) e eventos protegidos em software de app, signer e relay. &lt;a href="https://github.com/v0l/route96">Route96&lt;/a> lança duas versões focadas em rotulagem de IA, filas de moderação, perceptual hashing e documentação de servidor legível por máquina. &lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a>, já disponível na web, lançou seu primeiro alpha para Android e depois adicionou suporte de signer da &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application). &lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> adiciona cadastro via &lt;a href="https://nostrcompass.org/pt/topics/nip-49/">NIP-49&lt;/a> (Private Key Encryption), &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lança trabalho de resolução &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> (Domain Verification) baseado em Namecoin, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lança a &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>, e o repositório de NIPs faz merge da &lt;a href="https://nostrcompass.org/pt/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters) e de orientações defensivas para a &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring).&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="shopstr-e-milk-market-abrem-superfícies-mcp-para-comércio">Shopstr e Milk Market abrem superfícies MCP para comércio&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>, o marketplace peer-to-peer com pagamentos Lightning e Cashu, mergeou o &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>), adicionando um servidor MCP com autenticação por chave de API para gerenciamento de contas por agentes. A mudança adiciona &lt;code>.well-known/agent.json&lt;/code> para descoberta por agentes, endpoints de onboarding e status do MCP, rotas de criação de pedidos e verificação de pagamento, ferramentas dedicadas de compra e leitura, e uma tela de configurações para chaves de API. O &lt;a href="https://github.com/shopstr-eng/shopstr/pull/236">PR #236&lt;/a> estende isso com ações do lado do vendedor para mensagens, endereços, atualizações de pedido e seleção de especificação de produto. Uma correção de segurança no &lt;a href="https://github.com/shopstr-eng/shopstr/pull/235">PR #235&lt;/a> substitui o hashing de chave de API com SHA-256 em uma única iteração por PBKDF2 com salt e 100.000 iterações.&lt;/p>
&lt;p>Agentes podem ler anúncios da &lt;a href="https://nostrcompass.org/pt/topics/nip-99/">NIP-99&lt;/a> (Classified Listings) e seguir até o checkout usando os fluxos de pagamento já existentes da &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect) e da &lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a> (Cashu Wallet), sem fazer scraping de páginas nem reverse-engineering do comportamento do cliente.&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a>, um marketplace de alimentos em Nostr no &lt;a href="https://milk.market">milk.market&lt;/a>, incorporou a mesma base de MCP e chaves de API no &lt;a href="https://github.com/shopstr-eng/milk-market/commit/da6c0b499494b4e4861c4ff8a220e066c46285b3">commit da6c0b4&lt;/a>. O &lt;a href="https://github.com/shopstr-eng/milk-market/pull/10">PR #10&lt;/a> adiciona pedidos por assinatura, mudanças de endereço de entrega após a compra e tratamento de checkout com múltiplos comerciantes e múltiplas moedas para Stripe e outros fluxos de pagamento em fiat. Um &lt;a href="https://github.com/shopstr-eng/milk-market/pull/11">PR #11&lt;/a> posterior corrige um bug de inicialização do banco de dados no startup, em que a tabela de publicações falhadas em relays não era criada em instalações novas, causando erros 500 no primeiro carregamento. A interface voltada a agentes funciona com checkout Bitcoin-native no Shopstr ou checkout misto em fiat e Bitcoin no Milk Market.&lt;/p>
&lt;h3 id="nip-42-relay-auth-chega-a-bunker-signer-e-relay">NIP-42 relay auth chega a bunker, signer e relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>, um bunker &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) que conecta provedores OAuth à assinatura Nostr, adicionou login via &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a> (Browser Extension Signer), seleção automática de identidade única e limpeza de identidades deletadas (&lt;a href="https://github.com/flox1an/oauth-bunker/commit/f0c7683cb2374fd9a3ebd1b186055da8abd2c2ff">commit f0c7683&lt;/a>). Quando existe apenas uma identidade, o bunker agora a seleciona automaticamente em vez de exibir um prompt. Deletar uma identidade também remove suas atribuições e conexões pendentes. O &lt;a href="https://github.com/flox1an/oauth-bunker/commit/6b8796c6c59c7d48dc1ede92d6de6bf54feb56cc">commit 6b8796c&lt;/a> adiciona um caminho de configuração &lt;code>ALWAYS_ALLOWED_KINDS&lt;/code> para usuários atribuídos, com kind &lt;code>30078&lt;/code> de dados específicos de app como valor padrão, para que identidades delegadas possam gravar em armazenamento específico do app sem aprovação por evento.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>, o principal signer &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> para Android, lançou a &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3-pre4">v4.1.3-pre4&lt;/a> com quatro pre-releases ao longo da semana. O &lt;a href="https://github.com/greenart7c3/Amber/pull/317">PR #317&lt;/a> adiciona tratamento de autenticação de relay da &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> para requisições kind &lt;code>22242&lt;/code>. A implementação adiciona uma nova coluna no banco de dados para rastrear permissões específicas por relay, com um índice único em &lt;code>(pkKey, type, kind, relay)&lt;/code>. Usuários veem uma tela dedicada de autenticação onde podem permitir ou negar por relay, ou em todos os relays com escopo curinga &lt;code>*&lt;/code>, e persistir essa escolha. Permissões com curinga limpam todas as entradas específicas por relay de um kind. O &lt;a href="https://github.com/greenart7c3/Amber/pull/318">PR #318&lt;/a> complementa isso ao refatorar as telas de requisição multi-evento para exibir detalhes inline com cartões composable, em vez de navegar para uma tela separada. A release também atualiza os relays de perfil padrão, adiciona exibição de requisições em bottom sheet e corrige um crash em dispositivos MediaTek ao desabilitar o keystore StrongBox.&lt;/p>
&lt;p>No lado do relay, o &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> implementa o tratamento da NIP-42 para eventos protegidos da &lt;a href="https://nostrcompass.org/pt/topics/nip-70/">NIP-70&lt;/a>, e o &lt;a href="https://github.com/hoytech/strfry/pull/176">PR #176&lt;/a> rejeita reposts que incorporam eventos protegidos.&lt;/p>
&lt;h3 id="notedeck-adiciona-limites-de-relay-da-nip-11-e-recursos-do-agentium">Notedeck adiciona limites de relay da NIP-11 e recursos do Agentium&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop nativo da equipe do Damus, mergeou 14 PRs nesta semana. O &lt;a href="https://github.com/damus-io/notedeck/pull/1316">PR #1316&lt;/a> adiciona busca de limites de relay da &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document), então todos os relays de outbox agora respeitam &lt;code>max_message_length&lt;/code> e &lt;code>max_subscriptions&lt;/code> do documento de informações do relay. A implementação inclui processamento em background, exponential backoff com jitter para retries de conexão e headers HTTP Accept customizados. O &lt;a href="https://github.com/damus-io/notedeck/pull/1312">PR #1312&lt;/a> corrige um bug em que DMs às vezes deixavam de carregar após a troca de conta, e o &lt;a href="https://github.com/damus-io/notedeck/pull/1333">PR #1333&lt;/a> adiciona um mecanismo de backoff à comunicação multicast com relays para evitar spam de broadcast em caso de erro.&lt;/p>
&lt;p>O subsistema Agentium, a UI integrada de agente de programação do Notedeck, chamado internamente de &amp;ldquo;Dave&amp;rdquo;, recebeu colagem de imagens da área de transferência, configurações nomeadas de execução que sincronizam entre dispositivos via eventos kind &lt;code>31991&lt;/code> da &lt;a href="https://nostrcompass.org/pt/topics/nip-33/">NIP-33&lt;/a> (Parameterized Replaceable Events), um criador de git worktree e um seletor de modelo para escolher backends por sessão (&lt;a href="https://github.com/damus-io/notedeck/pull/1336">PR #1336&lt;/a>). O &lt;a href="https://github.com/damus-io/notedeck/pull/1338">PR #1338&lt;/a> integra &lt;code>egui_kittest&lt;/code> para testes headless de UI, e o &lt;a href="https://github.com/damus-io/notedeck/pull/1339">PR #1339&lt;/a> adiciona um cartão no dashboard para rastrear novas criações de listas de contatos por cliente. Um &lt;a href="https://github.com/damus-io/notedeck/pull/1314">PR #1314&lt;/a> ainda aberto porta a resolução Namecoin da NIP-05 do Amethyst para o Notedeck com buscas ElectrumX, roteamento Tor via SOCKS5 e integração com a barra de busca.&lt;/p>
&lt;h3 id="divine-lança-v106-com-infraestrutura-de-testes-e2e-e-importação-nip-49">diVine lança v1.0.6 com infraestrutura de testes E2E e importação NIP-49&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, o cliente de vídeos curtos em loop que restaura arquivos do Vine em &lt;a href="https://divine.video">divine.video&lt;/a>, lançou a &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.6">v1.0.6&lt;/a> com 127 PRs mergeados. A release adiciona importação de conta da &lt;a href="https://nostrcompass.org/pt/topics/nip-49/">NIP-49&lt;/a>, suporte externo à &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a>, tratamento de múltiplas contas, builds para macOS e Linux experimental, e uma biblioteca redesenhada de rascunhos e clips apoiada em armazenamento local.&lt;/p>
&lt;p>No lado de engenharia, o &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1928">PR #1928&lt;/a> adiciona uma infraestrutura completa de testes de integração E2E usando Patrol para automação de UI nativa contra uma stack backend em Docker, relay, API, Blossom, Postgres, Redis e ClickHouse. Cinco testes da jornada de autenticação cobrem cadastro, verificação, redefinição de senha, expiração de sessão e refresh de token. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2105">PR #2105&lt;/a> muda o carregamento de vídeo de HLS-first para MP4 direto com fallback automático para HLS, reduzindo tempos de carregamento de 30 a 60 segundos para algo praticamente instantâneo. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2076">PR #2076&lt;/a> coloca em cache a resposta da API do feed inicial em SharedPreferences para exibição instantânea em cold start. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2104">PR #2104&lt;/a> força rótulos de conteúdo &lt;code>ai-generated&lt;/code> a permanecerem ocultos nos feeds, e o &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2100">PR #2100&lt;/a> adiciona uma configuração de segurança para mostrar apenas vídeos hospedados pelo diVine. A migração do cache de perfil de Hive para Drift continua nos &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> e &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1903">PR #1903&lt;/a>, substituindo cerca de 1.074 linhas de código Hive por DAOs em Drift.&lt;/p>
&lt;h3 id="vector-v032-entrega-sincronização-negentropy-da-nip-77-e-melhorias-de-mls">Vector v0.3.2 entrega sincronização negentropy da NIP-77 e melhorias de MLS&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, o mensageiro desktop focado em privacidade que usa criptografia de grupo MLS com a &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages) e criptografia da &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads), lançou a &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.2">v0.3.2&lt;/a>. A principal mudança é a negentropy da NIP-77 para sincronização de grupos MLS (&lt;a href="https://github.com/VectorPrivacy/Vector/commit/b06adf4af2673fb5ac5add01356999ea70628eac">commit b06adf4&lt;/a>), que recupera mensagens perdidas de forma muito mais rápida usando boot paralelo. A release também adiciona um motor de áudio reconstruído com suporte completo a Linux, spoilers de imagem com pré-visualizações borradas, hyperlinks clicáveis com rich link previews, notificações &lt;code>@mention&lt;/code> com &lt;code>@everyone&lt;/code> para admins de grupo, autocomplete de shortcode de emoji, silenciamento de grupos, toque para reagir em reações existentes e uploads de arquivo canceláveis. O Vector filtra explicitamente eventos de chat em grupo da NIP-17 (&lt;a href="https://github.com/VectorPrivacy/Vector/commit/2179a51c0449b3a70663a1573195b7945adf58ba">commit 2179a51&lt;/a>), usando MLS exclusivamente para criptografia de grupo.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="route96-v050-e-v051">Route96 v0.5.0 e v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>, um servidor de mídia com suporte a Blossom e à &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> (HTTP File Storage), lançou a &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.0">v0.5.0&lt;/a> e a &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">v0.5.1&lt;/a>. A v0.5.0 adiciona rotulagem automatizada de IA, backfill retroativo para uploads sem rótulo, filas de moderação para arquivos sinalizados, rejeição de privacidade baseada em EXIF e tratamento de hashes banidos.&lt;/p>
&lt;p>A v0.5.1 adiciona hashes perceptuais de imagem, locality-sensitive hashing para busca de imagens semelhantes, endpoints administrativos em lote e um &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">&lt;code>SKILL.md&lt;/code>&lt;/a> publicado descrevendo a superfície de API do servidor para Blossom e NIP-96 voltada a tooling de agentes. O &lt;a href="https://github.com/v0l/route96/pull/58">PR #58&lt;/a> move workers de background para tasks Tokio totalmente assíncronas, e o &lt;a href="https://github.com/v0l/route96/commit/97b00a39e27b07053c2ad335dbf475bacba57bf8">commit 97b00a3&lt;/a> adiciona 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>, um leitor e publicador de textos longos disponível em &lt;a href="https://samizdat.press">samizdat.press&lt;/a>, lançou seu primeiro build Android na &lt;a href="https://github.com/satsdisco/samizdat/releases/tag/v1.0.0-alpha">v1.0.0-alpha&lt;/a>. O app abre em uma página Press curada com artigos longos no Nostr e navegação em abas inferiores entre Press, Feed, Saved e Write. O build Android adiciona armazenamento nativo de chaves usando criptografia do Android Keystore com desbloqueio biométrico, lida com URIs &lt;code>nostr:&lt;/code> e deep links de &lt;code>samizdat.press&lt;/code>, e oferece handoff para signer via seletor de apps do Android, Amber, Primal e outros, em vez de exigir importação direta de chave. Pull-to-refresh, tratamento de safe area em diferentes tamanhos de tela e integrações nativas de compartilhamento, clipboard, haptics e splash screen agora fazem parte do shell Android, e não do wrapper web.&lt;/p>
&lt;p>O &lt;a href="https://github.com/satsdisco/samizdat/commit/d17308f3c2e6020e14074fbb1c03a8f60f29a3e6">commit d17308f&lt;/a> adiciona assinatura baseada em intent da &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> para os fluxos Amber e Primal, e o &lt;a href="https://github.com/satsdisco/samizdat/commit/e29dab84f7b58edd621f7b86ed7ca6458f965614">commit e29dab8&lt;/a> substitui um workaround de ponte em JavaScript por um plugin nativo Capacitor usando &lt;code>startActivityForResult&lt;/code>. O app exige Android 7.0+ (API 24), é distribuído como APK de debug neste alpha e ainda não tem notificações push. Hoje a publicação depende de um app signer, enquanto o login com &lt;code>nsec&lt;/code> cobre leitura local e acesso à conta.&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>, um app de calendário descentralizado com compartilhamento privado de eventos da &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) disponível em &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a>, lançou a &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.0">v0.2.0&lt;/a> com o &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/38">PR #38&lt;/a>. A release estende o tratamento de eventos recorrentes da &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> (Calendar Events), avançando além da base de evento único da v0.1.0. As mudanças subjacentes também tocam armazenamento local de eventos, tratamento de signer e plumbing de notificações no Android. Este é o segundo aplicativo ativo da organização Formstr após a migração de repositório no mês passado.&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>, a exchange peer-to-peer de Bitcoin construída sobre Nostr, lançou a &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>. As correções de restauração de sessão de disputa (&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>) e de auto-close (&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>) &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">cobertas na semana passada&lt;/a> estão incluídas. Novidade nesta release: o &lt;a href="https://github.com/MostroP2P/mostro/pull/625">PR #625&lt;/a> adiciona um campo &lt;code>days&lt;/code> a eventos de avaliação de usuário do kind &lt;code>38384&lt;/code>, o &lt;a href="https://github.com/MostroP2P/mostro/pull/612">PR #612&lt;/a> adiciona expiração a esses eventos de avaliação, e o &lt;a href="https://github.com/MostroP2P/mostro/pull/614">PR #614&lt;/a> troca a expiração hardcoded de 24 horas de eventos de pedido por configurações de expiração definidas em configuração. O &lt;a href="https://github.com/MostroP2P/mostro/pull/622">PR #622&lt;/a> adiciona uma verificação de idempotência para evitar pagamentos duplicados de taxa de desenvolvimento.&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>, o cliente Flutter da exchange P2P Mostro, lançou a &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.1">v1.2.1&lt;/a> com 11 novos recursos e 11 correções de bugs. A release adiciona renderização de multimídia criptografada no chat de disputa (&lt;a href="https://github.com/MostroP2P/mobile/pull/514">PR #514&lt;/a>), auto-close da UI de disputa quando pedidos chegam a estado terminal (&lt;a href="https://github.com/MostroP2P/mobile/pull/503">PR #503&lt;/a>), leitura de QR para importação de carteira NWC (&lt;a href="https://github.com/MostroP2P/mobile/commit/12eaee4d154fa31b07f82b96819de520e825aee6">commit 12eaee4&lt;/a>), traduções em francês e tratamento de notificações push via FCM. O &lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a> corrige um bug de padding em assinaturas Schnorr ao fixar a dependência bip340 na 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>, o cliente de mensagens ao estilo Telegram com suporte a Cashu, lançou a &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.4-release">v1.5.4&lt;/a> focada em correções para desktop Linux: ícones de dock do AppImage, renderização de emoji, travamentos no menu de contexto e congelamentos na UI de resposta e cópia. A release também corrige problemas de upload de imagem e integração com npub.cash. O &lt;a href="https://github.com/0xchat-app/0xchat-app-main/pull/49">PR #49&lt;/a> elimina rebuilds desnecessários de UI ao remover um timer de polling de 3 segundos que forçava repaints glassmorphic sem fazer nada, e destrava a inicialização do login ao carregar o cache de eventos em paralelo, em vez de bloquear startup de relay, contatos e canais.&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>, um signer threshold FROST para Android com suporte à &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> e à &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, lançou a &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.0">v0.6.0&lt;/a> e a &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.1">v0.6.1&lt;/a>. A v0.6.0 adiciona coordenação de descritores de carteira e UI de gerenciamento, fluxo de backup/restore com autenticação biométrica (&lt;a href="https://github.com/privkeyio/keep-android/pull/184">PR #184&lt;/a>), recuperação de &lt;code>nsec&lt;/code> a partir de threshold shares (&lt;a href="https://github.com/privkeyio/keep-android/pull/187">PR #187&lt;/a>), geração cross-platform de frame QR animado via Rust UniFFI (&lt;a href="https://github.com/privkeyio/keep-android/pull/188">PR #188&lt;/a>) e trilha de auditoria de assinatura com verificação de cadeia (&lt;a href="https://github.com/privkeyio/keep-android/pull/189">PR #189&lt;/a>). A v0.6.1 troca a licença de AGPL-3.0 para 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>, o gateway estático para visualizar conteúdo Nostr em &lt;a href="https://njump.me">njump.me&lt;/a>, lançou a &lt;a href="https://github.com/fiatjaf/njump/releases/tag/v0.3.0">v0.3.0&lt;/a> com uma mudança incompatível no parsing de códigos &lt;code>note1&lt;/code> e uma atualização da biblioteca Nostr subjacente.&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>, um app descentralizado de relato de eventos na estrada usando Nostr, lançou sua primeira demo na &lt;a href="https://github.com/jooray/roadstr/releases/tag/v0.1.1">v0.1.1&lt;/a>. O app exibe eventos rodoviários em um mapa usando vector tiles do 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>, uma aplicação de e-bills com camada de transporte Nostr e relay dedicado em &lt;a href="https://www.bit.cr/">bit.cr&lt;/a>, lançou a &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.3">v0.5.3&lt;/a>. O &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/846">PR #846&lt;/a> adiciona os campos &lt;code>payment_actions&lt;/code> e &lt;code>bill_state&lt;/code> à API para estado de pagamento e aceitação, e o &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/849">PR #849&lt;/a> corrige o tratamento de endereços de assinatura para signers 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>, uma aplicação de chat construída sobre as bibliotecas .NET MLS e C# do protocolo Marmot, lançou a &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.3">v0.1.0-alpha.3&lt;/a>. A release adiciona suporte a signer externo para Amber e fluxos da &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (&lt;a href="https://github.com/DavidGershony/openChat/commit/e568d979fe15eead19172f2eb6f8cf26ca845247">commit e568d97&lt;/a>), move a persistência do estado MLS para dentro do serviço MLS para eliminar perda de dados na janela de crash (&lt;a href="https://github.com/DavidGershony/openChat/commit/4720bc8625136a0d5b0e23322bc0c50cd80577e8">commit 4720bc8&lt;/a>) e publica builds para Windows, Linux e Android via um novo 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>, um copiloto de trading em Kotlin Multiplatform para Nostr, lançou a &lt;a href="https://github.com/turizspace/OpenSignal/releases/tag/v1.0.0">v1.0.0&lt;/a>. A release empacota módulos KMP compartilhados para lógica de domínio, renderização de gráficos, autenticação e publicação em Nostr, suporte a uploads Blossom via &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> e hooks de inferência de IA baseados em ONNX nos shells Desktop e Android. A arquitetura publicada também inclui um serviço de IA em FastAPI para análise de screenshots de gráficos, pipelines de treinamento de modelo e um risk engine que produz planos estruturados de trade com sizing e avisos. O login aceita tanto chaves &lt;code>nsec&lt;/code> brutas quanto signers externos, e o fluxo de saída termina em publicação de eventos Nostr, e não apenas em análise local.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>, a alternativa ao Google Forms no Nostr, mergeou o &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>), adicionando um fluxo de cadastro que usa chaves privadas criptografadas da &lt;a href="https://nostrcompass.org/pt/topics/nip-49/">NIP-49&lt;/a> (Private Key Encryption). Antes dessa mudança, usuários precisavam de uma extensão de navegador &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a> ou de colar um &lt;code>nsec&lt;/code> bruto para usar o Formstr. O novo fluxo gera um par de chaves no lado do cliente, criptografa a chave privada com uma senha escolhida pelo usuário pelo esquema scrypt + XChaCha20-Poly1305 da NIP-49 e armazena a string &lt;code>ncryptsec&lt;/code> resultante. Depois disso, usuários podem entrar novamente só com a senha, sem instalar uma extensão signer. O gerenciamento de chaves permanece no lado do cliente durante todo o processo.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android cheio de recursos, mergeou quatro PRs que entregam o trabalho de resolução &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> apoiado em Namecoin que estava &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">aberto na semana passada&lt;/a>. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a> adiciona verificação NIP-05 resistente à censura via ElectrumX para identificadores &lt;code>.bit&lt;/code>, &lt;code>d/&lt;/code> e &lt;code>id/&lt;/code>. Quando o Amethyst detecta um desses sufixos em um campo NIP-05, ele consulta um servidor ElectrumX-NMC pelo histórico de transações do nome, analisa o script &lt;code>NAME_UPDATE&lt;/code> da saída mais recente para extrair a pubkey Nostr e rejeita nomes mais antigos que 36.000 blocos, a janela de expiração do Namecoin. Conexões ElectrumX passam por SOCKS5 quando o Tor está ativado, com seleção dinâmica de servidor entre endpoints clearnet e &lt;code>.onion&lt;/code>. Um cache LRU com TTL de uma hora evita consultas repetidas ao blockchain.&lt;/p>
&lt;p>O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1771">PR #1771&lt;/a> corrige condições de corrida e problemas de corretude no resolver desse fluxo. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1785">PR #1785&lt;/a> permite que novos usuários importem uma lista de follows durante o cadastro a partir de identificadores NIP-05 comuns ou dos apoiados em Namecoin. O &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1786">PR #1786&lt;/a> adiciona configurações customizadas de servidor ElectrumX para que usuários escolham qual servidor fará suas consultas.&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>, uma biblioteca que fornece métodos auxiliares para armazenar eventos Nostr em IndexedDB, mergeou o &lt;a href="https://github.com/hzrd149/nostr-idb/pull/6">PR #6&lt;/a> adicionando suporte a filtros de tag AND da &lt;a href="https://nostrcompass.org/pt/topics/nip-91/">NIP-91&lt;/a>. A mudança adiciona semântica de interseção ao matching de filtros no lado do cliente, para que consultas em IndexedDB possam exigir todos os valores de tag listados, em vez de qualquer um deles. O &lt;a href="https://github.com/hzrd149/nostr-idb/pull/8">PR #8&lt;/a> atualiza a biblioteca para a interface mais recente do NIP-DB, e um &lt;a href="https://github.com/hzrd149/nostr-idb/commit/b49b3d32c575ff8214dc3fb07675109c2a971972">commit b49b3d3&lt;/a> posterior corrige um deadlock em subscribe e remove o nostr-tools como dependência de produção.&lt;/p>
&lt;h3 id="pensieve">Pensieve&lt;/h3>
&lt;p>&lt;a href="https://github.com/andotherstuff/pensieve">Pensieve&lt;/a>, um indexador Nostr archive-first com analytics em ClickHouse, mergeou o &lt;a href="https://github.com/andotherstuff/pensieve/pull/8">PR #8&lt;/a> adicionando enforcement de TTL de cache por entrada e coalescência de misses por chave para reduzir picos de CPU na API. Os endpoints de séries temporais mais caros, estatísticas de engajamento, atividade por hora e atividade por kind, agora usam TTLs de 10 minutos no servidor em vez de disparar tempestades sincronizadas de recomputação.&lt;/p>
&lt;h3 id="blossom">Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a>, o protocolo e stack de servidor para hospedagem descentralizada de mídia, mergeou duas atualizações de autorização do BUD-11. O &lt;a href="https://github.com/hzrd149/blossom/pull/91">PR #91&lt;/a> move a autorização opcional para seu próprio BUD e esclarece o papel das tags &lt;code>x&lt;/code> e &lt;code>server&lt;/code>. O &lt;a href="https://github.com/hzrd149/blossom/pull/93">PR #93&lt;/a> limpa o comportamento de autenticação por endpoint e formaliza o header &lt;code>X-SHA-256&lt;/code> para verificação de upload. Os dois PRs consolidam a lógica de autenticação no BUD-11 e removem ambiguidades sobre hashing de requisições nos fluxos de upload, deleção e gerenciamento de mídia.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-91/">NIP-91&lt;/a> (AND Operator for Filters)&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">PR #1365&lt;/a>): Adiciona semântica de interseção para filtros de tags, permitindo que relays respondam a consultas que exigem todos os valores de tag listados, e não qualquer um deles. Isso reduz a pós-filtragem no lado do cliente e o consumo de banda em consultas pesadas em tags.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (Relay Discovery and Liveness Monitoring): Defensive Measures&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">PR #2240&lt;/a>): Após o &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">trabalho de benchmark de outbox coberto na semana passada&lt;/a>, a spec agora adiciona avisos sobre caminhos de falha nos dados de monitoramento de relay. Clientes não devem exigir eventos de monitoramento kind &lt;code>30166&lt;/code> para funcionar. Um monitor pode estar errado, desatualizado ou ser malicioso. Espera-se que clientes cruzem múltiplas fontes e evitem cortar grandes partes do grafo de relays de um usuário com base em um único feed.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> (External Identities in Profiles): kind 10011 Registry Cleanup&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2256">PR #2256&lt;/a>): Adiciona a referência ao kind &lt;code>10011&lt;/code> diretamente na spec, alinhando-a com a implementação do Amethyst &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">coberta na semana passada&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs abertos e discussões:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-70/">NIP-70&lt;/a> (Protected Events): Reject reposts that embed protected events&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a>): Se um relay aplica a NIP-70 ao evento original mas aceita reposts contendo o mesmo conteúdo, a tag &lt;code>-&lt;/code> perde efeito prático. Este PR adiciona a regra de que relays também devem rejeitar reposts kind 6 e kind 16 de eventos protegidos. O &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> já implementa isso.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-71/">NIP-71&lt;/a> (Video Events): Multiple Audio Tracks&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a>): Adiciona tags &lt;code>imeta&lt;/code> de áudio para trilhas alternativas, variantes de idioma e streams apenas de áudio. Um cliente pode manter um arquivo de vídeo estável enquanto troca o idioma do áudio, ou servir o áudio como faixa separada para conteúdo em estilo podcast.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> (Relay Information Document) and &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> Relay Attributes&lt;/strong> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2257">PR #2257&lt;/a>): Adiciona um campo estruturado &lt;code>attributes&lt;/code> aos documentos de informação de relay, dando a clientes e ferramentas de descoberta metadados legíveis por máquina além da descrição em texto livre atual.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-49-private-key-encryption">NIP Deep Dive: NIP-49 (Private Key Encryption)&lt;/h2>
&lt;p>A &lt;a href="https://nostrcompass.org/pt/topics/nip-49/">NIP-49&lt;/a> define como um cliente criptografa uma chave privada com uma senha e codifica o resultado como uma string bech32 &lt;code>ncryptsec&lt;/code>. O &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-11-newsletter/#formstr">Formstr&lt;/a> usa a NIP-49 em seu novo fluxo de cadastro.&lt;/p>
&lt;p>O formato não está ligado a um kind de evento dedicado. Um cliente começa com a chave privada secp256k1 bruta de 32 bytes, deriva uma chave simétrica a partir da senha do usuário com scrypt, criptografa a chave com XChaCha20-Poly1305 e então encapsula o resultado em uma string bech32 &lt;code>ncryptsec&lt;/code>. Um flag de um byte registra se a chave já foi manipulada de forma insegura antes da criptografia.&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>O evento JSON acima é um exemplo em nível de aplicação, não um requisito da NIP-49. O NIP padroniza o formato da chave criptografada. Um cliente pode armazenar o &lt;code>ncryptsec&lt;/code> localmente, sincronizá-lo por meio de armazenamento específico do app ou exportá-lo como string de backup. Senhas são normalizadas para Unicode NFKC antes da derivação da chave, para que a mesma senha seja descriptografada de forma consistente entre clientes e plataformas.&lt;/p>
&lt;p>O flag de segurança da chave, com um byte, tem três valores definidos: &lt;code>0x00&lt;/code> significa que o histórico de tratamento da chave é desconhecido, &lt;code>0x01&lt;/code> significa que a chave foi comprovadamente manipulada de forma insegura, por exemplo, colada como texto plano em um formulário web antes da criptografia, e &lt;code>0x02&lt;/code> significa que a chave foi gerada e criptografada em um contexto seguro e nunca foi exposta. Clientes podem usar isso para exibir avisos ao importar chaves com histórico inseguro conhecido.&lt;/p>
&lt;p>A NIP-49 protege chaves melhor do que um export simples de &lt;code>nsec&lt;/code>, mas a criptografia só é tão forte quanto a senha e o custo scrypt configurado. Valores maiores de &lt;code>LOG_N&lt;/code> tornam tentativas de adivinhação offline mais caras, mas também tornam operações legítimas de descriptografia mais lentas. A spec adverte contra publicar chaves criptografadas em relays públicos, já que atacantes se beneficiam de colecionar ciphertext para cracking offline. Para comparação, a assinatura remota da &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> evita expor chaves por completo, e a assinatura Android da &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> mantém chaves dentro de um app signer dedicado. A NIP-49 ocupa um papel diferente: backup criptografado portátil para usuários que gerenciam suas próprias chaves.&lt;/p>
&lt;p>As implementações incluem o &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">Formstr PR #434&lt;/a> para cadastro, o &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> para backup e restore de &lt;code>ncryptsec&lt;/code>, o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-11-newsletter/#divine-lanca-v106-com-infraestrutura-de-testes-e2e-e-importacao-nip-49">diVine v1.0.6&lt;/a> para importação de conta, o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-11-newsletter/#keep-v060">Keep v0.6.0&lt;/a> para exportação de FROST shares e ferramentas de gerenciamento de chaves como &lt;a href="https://nsec.app">nsec.app&lt;/a> e &lt;a href="https://github.com/getAlby/hub">Alby&lt;/a>.&lt;/p>
&lt;h2 id="nip-deep-dive-nip-70-protected-events">NIP Deep Dive: NIP-70 (Protected Events)&lt;/h2>
&lt;p>A &lt;a href="https://nostrcompass.org/pt/topics/nip-70/">NIP-70&lt;/a> define eventos protegidos. Quando um evento carrega a tag &lt;code>[&amp;quot;-&amp;quot;]&lt;/code>, um relay deve rejeitá-lo a menos que exija autenticação da &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> e que a pubkey autenticada corresponda ao autor do evento.&lt;/p>
&lt;p>O fluxo de autenticação da NIP-42 funciona da seguinte forma: o relay envia um desafio &lt;code>AUTH&lt;/code> contendo uma string aleatória, e o cliente responde com um evento kind &lt;code>22242&lt;/code> assinado cujas tags incluem a URL do relay e o desafio. O relay verifica a assinatura e checa se a pubkey no evento de autenticação corresponde à pubkey do evento protegido que está sendo publicado. Se as pubkeys não corresponderem, o relay rejeita o evento com o prefixo de mensagem &lt;code>restricted&lt;/code>.&lt;/p>
&lt;p>O conteúdo do evento ainda pode ser público. A tag &lt;code>-&lt;/code> controla apenas quem pode publicar o evento em um relay que respeita a tag. Isso cobre feeds semi-fechados da &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> (Simple Groups), espaços de relay apenas para membros e outros contextos em que o autor quer limitar a redistribuição pelo grafo de relays. A NIP-70 é uma convenção de tag única, não um novo kind de evento, então qualquer kind existente pode carregar a tag &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>Mesmo que um relay bloqueie a publicação de terceiros do evento original, alguém ainda pode republicar o conteúdo dentro de um repost. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a> trata disso ao exigir que relays também rejeitem reposts kind 6 e kind 16 de eventos protegidos. O &lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> adiciona tratamento de autenticação da NIP-42 para eventos protegidos, e o &lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> bloqueia reposts que incorporam conteúdo protegido.&lt;/p>
&lt;p>A NIP-70 controla o comportamento do relay. Um destinatário ainda pode copiar o conteúdo para outro lugar, e a spec diz isso explicitamente. A tag &lt;code>-&lt;/code> dá aos relays um sinal legível por máquina para recusar republicação. Para comparação, a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) pede que relays deletem dados depois do fato, enquanto a NIP-70 impede publicação não autorizada no momento da ingestão. As duas são complementares: um autor pode marcar eventos como protegidos para limitar a disseminação e, mais tarde, pedir deleção se quiser que o conteúdo seja removido dos relays que o aceitaram.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo por esta semana. Está construindo algo ou tem notícias para compartilhar? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Fale conosco por DM via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #12</title><link>https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> lança sua &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#marmot-development-kit-lan%c3%a7a-primeira-vers%c3%a3o-p%c3%bablica">primeira versão pública&lt;/a> com mídia criptografada e bindings multi-linguagem. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publica &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#modelo-outbox-sob-o-microsc%c3%b3pio">benchmarks do modelo outbox&lt;/a> em 14 algoritmos de seleção de relay. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> vai do &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#wisp-sai-do-alpha-para-o-beta">primeiro alpha ao beta&lt;/a> em oito dias com Tor e assinatura &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application). &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#atualiza%c3%a7%c3%b5es-de-nips">NIP-91&lt;/a> (filtros AND) é mergeado. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> entrega sincronização negentropy com ganhos de desempenho de 15x. Esta edição também inclui a retrospectiva Cinco Anos de Fevereiros do Nostr, traçando o protocolo desde uma reescrita de spec servindo três relays, passando pela explosão do Damus na App Store, até redes mesh e propostas de agentes de IA.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> lança sua &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#marmot-development-kit-lan%c3%a7a-primeira-vers%c3%a3o-p%c3%bablica">primeira versão pública&lt;/a> com mídia criptografada e bindings multi-linguagem. &lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publica &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#modelo-outbox-sob-o-microsc%c3%b3pio">benchmarks do modelo outbox&lt;/a> em 14 algoritmos de seleção de relay. &lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> vai do &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#wisp-sai-do-alpha-para-o-beta">primeiro alpha ao beta&lt;/a> em oito dias com Tor e assinatura &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer Application). &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#atualiza%c3%a7%c3%b5es-de-nips">NIP-91&lt;/a> (filtros AND) é mergeado. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> entrega sincronização negentropy com ganhos de desempenho de 15x. Esta edição também inclui a retrospectiva Cinco Anos de Fevereiros do Nostr, traçando o protocolo desde uma reescrita de spec servindo três relays, passando pela explosão do Damus na App Store, até redes mesh e propostas de agentes de IA.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="modelo-outbox-sob-o-microscópio">Modelo Outbox Sob o Microscópio&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> publicou uma série de benchmarks do modelo outbox testando quão bem diferentes algoritmos de seleção de relay recuperam eventos da rede descentralizada de relays. O projeto mergeou 16 PRs e 76 commits em dez dias, produzindo o que pode ser a análise empírica mais completa de estratégias de implementação do &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) até hoje.&lt;/p>
&lt;p>Os benchmarks testam 14 algoritmos de seleção de relay contra listas de follows reais em 15 clientes e bibliotecas em cinco linguagens. Uma abordagem de linha de base consultando apenas relays populares recupera aproximadamente 26% dos eventos. Set-cover guloso com Thompson Sampling alcança 80-90% de recall. Adicionar uma variante sensível a latência usando desconto hiperbólico e rastreamento de latência de relay EWMA elevou a completude de 62-80% para 72-96% na marca de 2 segundos em seis perfis de teste.&lt;/p>
&lt;p>A filtragem de relays inativos do &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (Relay Monitoring) provou ser consequente. Pré-filtrar candidatos de relay contra dados de atividade do &lt;a href="https://nostr.watch">nostr.watch&lt;/a> removeu 40-64% dos relays inativos e dobrou as taxas de sucesso de relay de 30% para 75-85%. Tempos de carregamento de feed caíram 39% (de 40 segundos para 24 segundos em 10 perfis). Uma simulação de corrida EOSE descobriu que esperar pelo EOSE mais um período de graça de 200ms melhorou a completude em comparação com parar no primeiro relay a terminar.&lt;/p>
&lt;p>Para clientes que não conseguem reescrever completamente seu roteamento de relay, uma abordagem de &amp;ldquo;enriquecimento outbox híbrido&amp;rdquo; adiciona consultas outbox por autor sobre os relays hardcoded existentes do app. Esse híbrido alcançou 80% de recall de eventos de um ano contra os 26% da linha de base, oferecendo um caminho de migração para clientes com arquiteturas de relay legadas.&lt;/p>
&lt;h3 id="contextvm-abre-nip-de-mcp-e-lança-gift-wraps-efêmeros">ContextVM Abre NIP de MCP e Lança Gift Wraps Efêmeros&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a>, o protocolo fazendo ponte entre o Nostr e o &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a>, abriu duas propostas no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a> esta semana. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2246">PR #2246&lt;/a> formaliza CVM como uma convenção para transportar mensagens MCP JSON-RPC sobre Nostr usando eventos efêmeros kind 25910. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> estende o &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> (Gift Wrap) com um kind efêmero (21059) que segue a semântica efêmera do &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a> (Basic Protocol Flow), permitindo que relays descartem mensagens encapsuladas após a entrega.&lt;/p>
&lt;p>A convenção de gift wrap efêmero foi lançada como &lt;a href="https://docs.contextvm.org/spec/ceps/cep-19/">CEP-19&lt;/a> na família de lançamento ContextVM SDK v0.6.x. A &lt;a href="https://github.com/ContextVM/sdk">implementação do SDK&lt;/a> adiciona um enum &lt;code>GiftWrapMode&lt;/code> com três configurações: OPTIONAL (aceita ambos os kinds e auto-detecta capacidade do par), EPHEMERAL (apenas kind 21059) e PERSISTENT (apenas kind 1059). Para chamadas de ferramentas de IA, o modo efêmero evita armazenar tráfego intermediário de requisição-resposta nos relays, reduzindo tanto custos de armazenamento quanto exposição de privacidade.&lt;/p>
&lt;p>Novos servidores MCP públicos apareceram na rede de operadores independentes, incluindo um servidor de consulta Wolfram Alpha. A equipe ContextVM publicou CEP-15 (esquema de ferramentas comuns) e CEP-17 (publicação de lista de relays de servidor) junto com o ciclo de lançamento v0.6.x.&lt;/p>
&lt;h3 id="marmot-development-kit-lança-primeira-versão-pública">Marmot Development Kit Lança Primeira Versão Pública&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> (Marmot Development Kit), a biblioteca Rust que alimenta mensagens criptografadas com &lt;a href="https://nostrcompass.org/pt/topics/mls/">Marmot&lt;/a> em &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, lançou &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.6.0">v0.6.0&lt;/a> como sua primeira versão pública. Mais de 200 PRs foram mergeados nesta versão, com seis novos contribuidores.&lt;/p>
&lt;p>O lançamento inclui suporte a mídia criptografada (MIP-04) com derivação de seed HKDF (MIP-01 v2), resolução determinística de corrida de commits (MIP-03), armazenamento local criptografado, validação de autorização de admin para commits e propostas Marmot, e suporte GREASE para extensibilidade do protocolo. Bindings são fornecidos para Kotlin, Python, Ruby e Windows junto com compilação cruzada para Android. A biblioteca atualiza para OpenMLS 0.8.0 com correções de avisos de segurança e um tipo &lt;code>Secret&amp;lt;T&amp;gt;&lt;/code> que zeroiza valores sensíveis na memória.&lt;/p>
&lt;p>Uma mudança de protocolo complementar (&lt;a href="https://github.com/marmot-protocol/marmot/pull/48">MIP-03&lt;/a>) substituiu a criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (Encrypted Payloads) por ChaCha20-Poly1305 para mensagens kind 445. NIP-44 exigia entrada de string UTF-8 conforme sua especificação, tornando impossível passar bytes brutos de mensagem Marmot através de bibliotecas Nostr TypeScript padrão. A substituição deriva chaves diretamente do segredo exportador do Marmot. Essa mudança que quebra compatibilidade exigiu atualizações coordenadas em toda a &lt;a href="https://github.com/marmot-protocol/marmot/pull/48">spec core&lt;/a>, &lt;a href="https://github.com/marmot-protocol/mdk/pull/208">MDK&lt;/a> e &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/54">TypeScript SDK&lt;/a>.&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>, a implementação TypeScript mantida por hzrd149, mergeou quatro PRs com mudanças que quebram a API. Uma &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/52">atualização omnibus&lt;/a> adicionou um gerenciador de pacote de chaves para ciclo de vida criar/publicar/rotacionar, um método conveniente &lt;code>sendChatMessage&lt;/code>, pré-visualização de convite sem entrar (&lt;code>readInviteGroupInfo&lt;/code>), auto-atualização para rotações de sigilo futuro e logging de debug estruturado. APIs de descriptografia de grupo foram renomeadas de &lt;code>readGroupMessage&lt;/code> para &lt;code>decryptGroupMessage&lt;/code> com variantes de resultado mais ricas (processed/skipped/rejected/unreadable). gzuuus contribuiu limpeza de exemplos com suporte a relay NIP-65 e tratamento de pacote de chaves de último recurso conforme MIP-00.&lt;/p>
&lt;p>O &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise CLI&lt;/a> (&lt;code>wn&lt;/code>), o backend Rust que alimenta tanto o app mobile quanto o novo TUI, mergeou 16 PRs em dez dias. O tratamento do ciclo de vida do assinador ganhou segurança contra cancelamento através de um scope guard RAII (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/538">PR #538&lt;/a>), corrigindo uma classe de bugs onde operações abortadas podiam vazar estado do assinador. O login agora bloqueia quando listas de relay obrigatórias (kind 10002/10050/10051) estão ausentes (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/515">PR #515&lt;/a>), e assinaturas de giftwrap recorrem a relays &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> quando listas de inbox estão ausentes (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/518">PR #518&lt;/a>). Um modo debug (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/528">PR #528&lt;/a>) expõe consultas ao banco de dados e inspeção da árvore de ratchet MLS como saída JSON. Outras correções trataram recuperação de assinatura após re-registro do assinador, timing de catch-up de mensagens de boas-vindas, validação de filtro de relay e limites de raio de busca de usuários.&lt;/p>
&lt;p>O Marmot teve expansão significativa além da stack Rust core esta semana. &lt;a href="https://github.com/marmot-protocol/wn-tui">White Noise TUI&lt;/a>, uma interface baseada em terminal para a stack de mensagens White Noise, foi lançado em 3 de março. Ele encapsula o CLI &lt;code>wn&lt;/code> como um subprocesso e renderiza sua saída JSON através de uma arquitetura unidirecional inspirada em Elm, fornecendo navegação entre múltiplas conversas com indicadores de não lidos, criação de grupo e busca de membros, streaming de mensagens em tempo real e reações com emoji pelo terminal.&lt;/p>
&lt;p>&lt;a href="https://github.com/DavidGershony">DavidGershony&lt;/a> publicou uma stack Marmot completa em C# espelhando a arquitetura em camadas do ferramental Rust. &lt;a href="https://github.com/DavidGershony/dotnet-mls">dotnet-mls&lt;/a> implementa primitivas criptográficas MLS RFC 9420 em C#. &lt;a href="https://github.com/DavidGershony/marmot-cs">marmot-cs&lt;/a> constrói sobre isso para adicionar transporte por relay Nostr, funcionando como equivalente em C# do MDK. &lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>, um app desktop multiplataforma construído com .NET 9 e Avalonia UI, une ambos em um cliente de chat funcional com DMs NIP-44, criptografia de grupo Marmot, assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) e indicadores de status multi-relay.&lt;/p>
&lt;p>&lt;a href="https://github.com/zerosats/mdk-pwa-reference">MDK PWA Reference&lt;/a> fornece um template Progressive Web App para construir aplicações criptografadas com Marmot, com suporte experimental para participação de agentes de IA em chats de grupo e pagamentos Bitcoin via infraestrutura de carteira Arkade.&lt;/p>
&lt;h3 id="wisp-sai-do-alpha-para-o-beta">Wisp Sai do Alpha para o Beta&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> é um novo cliente Nostr para Android que foi do &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.1.0-alpha">primeiro alpha&lt;/a> em 24 de fevereiro ao &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.3.4-beta">v0.3.4-beta&lt;/a> em 3 de março, produzindo 19 lançamentos, 115 PRs mergeados e 276 commits em oito dias.&lt;/p>
&lt;p>A trajetória de recursos cobre terreno que a maioria dos clientes leva meses para alcançar. A v0.1.0 foi lançada com suporte ao modelo de relay outbox/inbox e fluxos de onboarding. Na v0.1.3, o cliente tinha assinatura baseada em intent &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> para Amber, um proxy SOCKS5 Tor embutido para conectividade de relay &lt;code>.onion&lt;/code>, e &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect). A v0.2.0 graduou para beta com filtragem de lista de mute e suporte a emoji personalizado, enquanto a v0.2.4 adicionou overlays de aviso de conteúdo. A série v0.3.x introduziu proof-of-work &lt;a href="https://nostrcompass.org/pt/topics/nip-13/">NIP-13&lt;/a> para notas, mineração PoW em background com configurações persistentes, armazenamento de relay &lt;code>.onion&lt;/code> e notificações de mute de thread.&lt;/p>
&lt;p>Tradução no dispositivo via Google ML Kit roda localmente sem acesso à rede após o download inicial do modelo. Uma visualização interativa de grafo social usa uma simulação de física velocity Verlet a aproximadamente 30fps com navegação pinch-to-zoom e inspeção de perfil.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&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>, o app de mensagens criptografadas com Marmot, lançou &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.1">v0.3.1&lt;/a> com melhorias de gerenciamento de grupo e trabalho de desempenho. Grupos multi-admin, convites em massa, convite por npub e avatares de grupo expandem os recursos de colaboração. Notificações em background no Android agora suportam ações inline de Responder e Marcar como Lido.&lt;/p>
&lt;p>Sincronização determinística baseada em &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> recupera histórico completo de conversas incluindo mensagens perdidas durante períodos offline. Voz-para-texto reconstruído com aceleração GPU no Android. O tratamento de anexos de arquivo foi reformulado com progresso de download, estados de retry, zip-e-envio de diretório e indicadores de progresso ao vivo em toda parte. O desempenho melhorou mais de 15x em tempo de inicialização, processamento de imagem, reprodução de áudio e responsividade geral da UI. O tamanho de instalação do app caiu mais de um terço, com o frontend reduzido aproximadamente pela metade. Suporte a Android ARM de 32 bits foi adicionado.&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>, o nó Lightning auto-custodial com suporte a Nostr Wallet Connect (&lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a>), lançou &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.5">v1.21.5&lt;/a>. Um segundo relay foi adicionado à configuração NWC padrão, melhorando a confiabilidade durante reinicializações de relay. Uma correção para dados de zap inválidos na lista de transações resolve um problema de exibição com eventos &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a> (Lightning Zaps) malformados. Novas entradas na app store incluem Alby CLI e 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>, o cliente Nostr de mensagens baseado em texto, lançou três versões durante o período. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.0">v0.12.0&lt;/a> adicionou bloqueio de app por PIN com teclado de 4 dígitos e mais de 15 novas traduções de idiomas incluindo bengali, tailandês, vietnamita, hindi, árabe, hebraico, urdu, turco, japonês, chinês, coreano, holandês, polonês, russo e persa com suporte RTL. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.1">v0.12.1&lt;/a> introduziu um tema Cypher com fundos preto puro e acentos ciano, além de geração de poster de vídeo para Android. &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.2">v0.12.2&lt;/a> adicionou exportação de chat e Ver Perfil nos menus de contato.&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>, o relay pessoal Android de greenart7c3, lançou &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre2">v2.0.0-pre2&lt;/a> com melhorias de desempenho de relay através de novos índices de banco de dados e coroutines Kotlin reestruturadas. Cada app web hospedado agora inicia em sua própria porta. Busca full-text e uma tela de eventos redesenhada com expansão de eventos completam as mudanças.&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>, uma aplicação de anotações baseada no Nostr, lançou 8 versões de &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.0">v0.5.0&lt;/a> até &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.7">v0.5.7&lt;/a>. O lançamento da v0.5.0 no Android adicionou suporte ao assinador Amber &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> e publicação de notas &lt;a href="https://nostrcompass.org/pt/topics/nip-71/">NIP-71&lt;/a> (Video Events). Uma página de boas-vindas redesenhada na v0.5.1 incluiu pré-visualizações de timeline pública e reduziu o APK para 15 MB. O Relay Browser na v0.5.2 permite que usuários naveguem em timelines públicas de relays via URLs compartilháveis, junto com download de mídia e reações de emoji personalizado &lt;a href="https://nostrcompass.org/pt/topics/nip-30/">NIP-30&lt;/a>. Lançamentos subsequentes até a v0.5.7 trataram condições de corrida de sincronização no sistema de compartilhamento de notas colaborativas &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>, o app de chamadas de voz e vídeo no Nostr, lançou &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.1-release">v0.5.1&lt;/a> com suporte a mensagens de voz, uma experiência desktop otimizada com entrada de grupo, favoritos de contato no desktop, notas e filtragem de contatos, opções de exportação e limpeza de dados, e suporte a acessibilidade de tamanho de fonte do 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>, o app de transmissão ao vivo no Nostr, lançou &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.13.0">v0.13.0&lt;/a> com downloads de replay em MP4 nos menus de cartão de stream e &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> (DNS-Based Verification) para perfis. O publisher RTMP migrou para a Expo Modules API. O desempenho de streaming em conexões de menor largura de banda melhorou, e crashes em dispositivos mais antigos e streaming iOS para &lt;a href="https://zap.stream">Zap.Stream&lt;/a> foram corrigidos.&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> lançou &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.0">v2.0.0&lt;/a> com tamanhos de buffer WebSocket configuráveis, permitindo que aplicações lidem com eventos Nostr maiores sem truncamento. O major version bump reflete mudanças que quebram compatibilidade na API de conexão.&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> lançou &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.0">1.1.0&lt;/a> com suporte a conteúdo de formato longo (artigos kind 30023) e um editor Markdown para composição diretamente no app, seguido por um lançamento de correção &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>, a plataforma de crowdfunding Bitcoin, lançou &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.6">v0.2.6&lt;/a> com integração Boltz e um fluxo de investimento em 1 clique. Tanto os tipos investir quanto financiar projeto funcionam de ponta a ponta na testnet. A equipe nota que a UI está aproximadamente 70% completa.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&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: AND Operator for Filters&lt;/a>&lt;/strong>: Adiciona semântica de filtro AND para arrays de tags em assinaturas de relay. Atualmente, especificar múltiplos valores em um filtro de tag (por exemplo, múltiplas tags &lt;code>p&lt;/code>) corresponde a eventos contendo qualquer um deles. NIP-91 permite que clientes exijam eventos correspondendo a todos os valores de tag especificados simultaneamente, reduzindo largura de banda e habilitando operações de índice mais rápidas. Múltiplas implementações de relay já existem incluindo nostr-rs-relay, satellite-node, worker-relay e 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: Emoji Set Address in Tags&lt;/a>&lt;/strong>: Tags de emoji personalizado no &lt;a href="https://nostrcompass.org/pt/topics/nip-30/">NIP-30&lt;/a> agora podem incluir um endereço opcional de conjunto de emoji. Clicar em um emoji em um cliente pode abrir o conjunto ao qual pertence para favoritar ou navegar. Originado do 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: Add unallowpubkey and unbanpubkey&lt;/a>&lt;/strong>: Dois novos comandos de admin para chat de grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>. &lt;code>unallowpubkey&lt;/code> remove uma pubkey da lista de permitidos sem bani-la. &lt;code>unbanpubkey&lt;/code> levanta um banimento sem re-adicionar a pubkey à lista de membros. Anteriormente, a única forma de remover alguém da lista de permitidos também bania a pessoa, e desbanir exigia re-adicionar o usuário como membro.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&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> (aberto 27 fev): Proposto por purrgrammer, spells são consultas Nostr salvas e portáteis publicadas como eventos kind 777. Um spell codifica um filtro REQ ou COUNT em tags estruturadas (&lt;code>k&lt;/code> para kinds, &lt;code>authors&lt;/code> para pubkeys, &lt;code>tag&lt;/code> para filtros de tags arbitrários) com variáveis de runtime: &lt;code>$me&lt;/code> resolve para a pubkey do usuário logado, &lt;code>$contacts&lt;/code> expande para a lista de follows kind 3 do usuário. Timestamps relativos (&lt;code>7d&lt;/code>, &lt;code>2w&lt;/code>, &lt;code>1mo&lt;/code>) permitem que spells definam janelas de tempo rolantes sem datas hardcoded. Já implementado em &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> e &lt;a href="https://github.com/purrgrammer/grimoire">Grimoire&lt;/a>, spells permitem que usuários criem, compartilhem e se inscrevam em feeds curados que viajam 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: Ephemeral Gift Wrap (kind 21059)&lt;/a>&lt;/strong> (aberto 27 fev): Adiciona uma variante efêmera dos gift wraps &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>. O kind 21059 segue a semântica efêmera do NIP-01, então relays descartam eventos após a entrega. Proposto por ContextVM para transporte MCP onde persistência de mensagens é desnecessária.&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 over Nostr&lt;/a>&lt;/strong> (aberto 27 fev): Especifica como transportar mensagens Model Context Protocol sobre Nostr usando eventos efêmeros kind 25910 com tags &lt;code>p&lt;/code> e &lt;code>e&lt;/code> para endereçamento e correlação. Intencionalmente fino, delegando detalhes de protocolo à &lt;a href="https://docs.contextvm.org">spec 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: Audio/Video Live Spaces&lt;/a>&lt;/strong> (aberto 25 fev, rascunho): Rascunho de fiatjaf estendendo grupos &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> com áudio e vídeo ao vivo. A proposta adiciona tags opcionais &lt;code>livekit&lt;/code> e &lt;code>no-text&lt;/code> a eventos de metadados de grupo. Quando um usuário quer entrar em um espaço de voz, o cliente solicita um JWT do relay em &lt;code>/.well-known/nip29/livekit/{groupId}&lt;/code>. O relay verifica a associação ao grupo e emite um token com a pubkey hex do usuário como claim &lt;code>sub&lt;/code>, que é passado ao &lt;a href="https://livekit.io/">LiveKit&lt;/a> para transporte de mídia. O acesso à sala de voz herda o modelo de permissão existente do grupo, então regras de associação do lado do relay governam quem pode falar. Sendo testado no Pyramid e Chachi.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2235">Collaborative Event Ownership&lt;/a>&lt;/strong> (aberto 24 fev): pablof7z propõe um evento ponteiro (kind 39382) que declara um espaço colaborativo listando pubkeys de co-proprietários em tags &lt;code>p&lt;/code> e um kind de evento alvo em uma tag &lt;code>k&lt;/code>. Qualquer proprietário listado pode publicar eventos desse kind com a mesma tag &lt;code>d&lt;/code>, e clientes resolvem o estado atual consultando todos os proprietários e pegando o evento mais recente. A atribuição de co-autoria só aparece quando uma tag &lt;code>a&lt;/code> verificável referencia de volta o ponteiro e o autor aparece em suas tags &lt;code>p&lt;/code>, prevenindo reivindicações falsificadas. Isso habilita páginas wiki compartilhadas e recursos co-autorados sem atribuir controle a um único par de chaves.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2234">NIP-09: Cascading Deletion of Reposts&lt;/a>&lt;/strong> (aberto 24 fev): Quando um autor original deleta uma nota, relays também devem deletar quaisquer reposts kind 6 ou kind 16 que a referenciam. Motivado por preocupações de privacidade: reposts podem preservar informações acidentalmente vazadas após o autor deletar a fonte. A mudança é apenas do lado do relay, não exigindo modificações nos clientes.&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> (aberto 23 fev): Adiciona um método &lt;code>peekPublicKey()&lt;/code> a extensões de navegador &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>. Diferente de &lt;code>getPublicKey()&lt;/code>, retorna a pubkey atual sem solicitar confirmação do usuário, habilitando auto-login silencioso quando o usuário tem 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> (aberto 28 fev, rascunho): Define quatro kinds de evento endereçáveis (30300-30303) para publicação estruturada de livros no Nostr. Um evento Cover contém metadados raiz incluindo título, imagem de capa, licença via labels &lt;a href="https://nostrcompass.org/pt/topics/nip-32/">NIP-32&lt;/a> (Labeling) e código de idioma. Um evento Index mapeia cada capítulo à sua posição usando indexação fracionária base62, que permite aos autores inserir novos capítulos entre existentes sem renumerar. Eventos Chapter agem como cabeçalhos estruturais com imagens opcionais, enquanto eventos Episode carregam a prosa real limitada a 30.000 caracteres com tags de imagem posicionadas. Resenhas usam Zaps em eventos Cover com a descrição do Zap como texto da resenha.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">NIP-54: Switch from Asciidoc to Djot&lt;/a>&lt;/strong> (aberto 26 fev): Após a &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-31-newsletter/">correção de internacionalização de d-tag&lt;/a> em dezembro, este PR propõe substituir o formato de marcação Asciidoc do wiki &lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a> por &lt;a href="https://djot.net/">Djot&lt;/a>, adicionando uma seção de justificativa e exemplos de wikilink para scripts não-latinos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">NIP-66: Defensive Measures&lt;/a>&lt;/strong> (aberto 26 fev): Baseado nos aprendizados dos benchmarks &lt;a href="https://nostrcompass.org/pt/newsletters/2026-03-04-newsletter/#modelo-outbox-sob-o-microsc%c3%b3pio">nostrability/outbox&lt;/a>, adiciona chamadas explícitas para casos limite do &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a>. Um &lt;a href="https://github.com/nostr-protocol/nips/pull/2241">PR #2241&lt;/a> complementar define tags de saída para SSL, geolocalização, rede e verificações de conectividade.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-C1: Cryptographic Identity Proofs&lt;/strong> (entrada wiki, kind 30817): Propõe eventos kind 30509 que vinculam criptograficamente certificados de assinatura APK a perfis Nostr. A prova funciona assinando uma mensagem canônica contendo a pubkey Nostr com a chave privada do certificado (suportando ECDSA, RSA PKCS1v15, Ed25519 e outros algoritmos padrão), depois publicando a assinatura em um evento kind 30509 assinado com a chave Nostr. Verificadores podem confirmar que a pessoa que controla o certificado de assinatura de um app Android também controla a pubkey Nostr que afirma publicá-lo. Provas expiram após um ano por padrão e podem ser explicitamente revogadas. Implementado no ferramental &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-31402: SARA Revenue Share Offering Registry&lt;/strong> (entrada wiki, kind 30817): Define eventos endereçáveis kind 31402 para publicar ofertas de Simple Autonomous Revenue Agreement (SARA) em relays Nostr. Emissores anunciam termos de compartilhamento de receita liquidados via Lightning incluindo percentual de pool share, gatilho de pagamento, limiar em sats, duração do termo e preço por faixas. Agentes e humanos podem descobrir ofertas em relays e se inscrever autonomamente sem uma plataforma central. O número do kind espelha o kind 30402 (L402 Service Registry, publicado pelo mesmo autor como uma entrada wiki complementar) já que SARA representa o retorno da relação de pagamento L402.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="prs-abertos-e-atualizações-de-projetos">PRs Abertos e Atualizações de Projetos&lt;/h2>
&lt;h3 id="damus-nip-89pttopicsnip-89-recommended-application-handlers">Damus: &lt;a href="https://nostrcompass.org/pt/topics/nip-89/">NIP-89&lt;/a> (Recommended Application Handlers)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/damus-io/damus/pull/3337">PR #3337&lt;/a> implementa suporte a client tag NIP-89 para &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>. O app agora emite uma client tag em todos os caminhos de publicação (app principal, extensão de compartilhamento, highlighter, rascunhos) e exibe &amp;ldquo;via ClientName&amp;rdquo; ao lado de timestamps quando outros apps incluem suas tags. Um toggle de Privacidade nas configurações de Aparência permite que usuários desabilitem a emissão de tag. O &lt;a href="https://github.com/damus-io/damus/pull/3652">PR #3652&lt;/a> adiciona uma seção de Armazenamento em Configurações com um gráfico de pizza interativo detalhando uso de disco do cache NostrDB e Kingfisher com suporte a exportação.&lt;/p>
&lt;p>Em aberto: &lt;a href="https://github.com/damus-io/damus/pull/3657">PR #3657&lt;/a> adiciona fallback de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> para notas citadas. Quando um &lt;code>nevent&lt;/code> inline inclui uma pubkey de autor mas nenhuma dica de relay e a nota está ausente do pool do usuário, Damus busca a lista de relays kind 10002 do autor e tenta novamente a partir de seus relays de escrita.&lt;/p>
&lt;h3 id="amethyst-nip-39pttopicsnip-39-external-identities-nip-c0-nip-66pttopicsnip-66">Amethyst: &lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> (External Identities), NIP-C0, &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a>&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> mergeou uma onda de implementações de NIPs em 28 PRs. Reivindicações de identidade externa agora publicam como eventos dedicados kind 10011 sob &lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1747">PR #1747&lt;/a>), separando identidade social de metadados kind 0 com fallback retrocompatível. Suporte a trechos de código via NIP-C0 (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1744">PR #1744&lt;/a>) adiciona eventos kind 1337 com acessores para linguagem, extensão, runtime, licença e dependências. A implementação de monitoramento de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1742">PR #1742&lt;/a>) cobre ambos os kinds de evento com parsing completo de tags para métricas RTT, tipo de rede, NIPs suportados e geohash.&lt;/p>
&lt;p>DMs criptografadas chegaram ao Amethyst Desktop (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1710">PR #1710&lt;/a>) com um layout de chat em painéis divididos suportando tanto &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> (Encrypted Direct Messages) quanto &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages). Uma nova tela de feed de relay (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1733">PR #1733&lt;/a>) permite que usuários naveguem posts de um relay específico com funcionalidade de follow/unfollow. Em aberto: verificação NIP-05 resistente a censura (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a>) adiciona um caminho de verificação paralelo para identificadores &lt;code>.bit&lt;/code> que resolve contra a blockchain Namecoin em vez de HTTP DNS. Quando Amethyst detecta um sufixo &lt;code>.bit&lt;/code> em um campo NIP-05, consulta um servidor ElectrumX-NMC pelo histórico de transações do nome, faz parsing do script &lt;code>NAME_UPDATE&lt;/code> da saída mais recente para extrair a pubkey Nostr, e rejeita nomes mais antigos que 36.000 blocos (janela de expiração do Namecoin). Conexões ElectrumX roteiam através de SOCKS5 quando Tor está habilitado, com seleção dinâmica de servidor entre endpoints clearnet e &lt;code>.onion&lt;/code>. Um cache LRU com TTL de uma hora previne consultas repetidas à blockchain.&lt;/p>
&lt;h3 id="notedeck-arquitetura-outbox">Notedeck: Arquitetura Outbox&lt;/h3>
&lt;p>O &lt;a href="https://github.com/damus-io/notedeck/pull/1303">PR #1303&lt;/a> migra o &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> de gerenciamento ad-hoc de pool de relays para um modelo outbox centralizado com assinaturas com escopo de conta. O módulo Messages agora publica uma lista de relay DM padrão se nenhuma existir e roteia DMs para relays preferidos dos destinatários conforme kind 10050.&lt;/p>
&lt;h3 id="pika-perfis-por-grupo-e-feed-tutorial">Pika: Perfis por Grupo e Feed Tutorial&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, o app de mensagens criptografadas com Marmot disponível para iOS e Android com build desktop, ganhou perfis por grupo (&lt;a href="https://github.com/sledtools/pika/pull/368">PR #368&lt;/a>). Usuários agora podem definir um nome de exibição e foto separados para cada chat de grupo, junto com uma bio personalizada. Esses perfis publicam como eventos kind 0 criptografados dentro do grupo Marmot, invisíveis para qualquer pessoa fora dele, com fallback para o perfil Nostr global do usuário quando nenhum perfil específico do grupo está definido. Quando novos membros entram, o admin retransmite todos os perfis de grupo armazenados e cada membro republica o seu próprio no commit. Fotos de perfil são criptografadas com Marmot-media antes do upload Blossom. O PR inclui 16 novos testes unitários e expõe o recurso tanto através de um comando CLI (&lt;code>update-group-profile&lt;/code>) quanto da UI.&lt;/p>
&lt;p>Um novo web app &lt;code>pika-news&lt;/code> (&lt;a href="https://github.com/sledtools/pika/pull/401">PR #401&lt;/a>) monitora os PRs do próprio GitHub do Pika e gera automaticamente tutoriais passo a passo de walkthroughs a partir de diffs de PRs, publicando-os como páginas renderizadas no servidor com autenticação &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>. Usuários podem discutir tutoriais específicos em tempo real através de chat autenticado por Nostr.&lt;/p>
&lt;h3 id="divine-widgets-embutíveis-e-respostas-em-vídeo">diVine: Widgets Embutíveis e Respostas em Vídeo&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, a plataforma de compartilhamento de vídeo nativa do Nostr, mergeou 132 PRs em dez dias. Widgets embutíveis via iframe (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1843">PR #1843&lt;/a>) fornecem uma página &lt;code>/embed?npub=...&lt;/code> autocontida que renderiza o perfil de um usuário e seus vídeos mais recentes. Funcionalidade de resposta em vídeo (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1915">PR #1915&lt;/a>), protegida por feature flag, usa comentários Kind 1111 (&lt;a href="https://nostrcompass.org/pt/topics/nip-22/">NIP-22&lt;/a>) com metadados imeta &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a> (Media Attachments). Filtros de conteúdo em três vias inspirados no Bluesky (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1797">PR #1797&lt;/a>) oferecem controles Mostrar/Avisar/Ocultar em 17 categorias de aviso de conteúdo &lt;a href="https://nostrcompass.org/pt/topics/nip-32/">NIP-32&lt;/a>.&lt;/p>
&lt;h3 id="strfry-validação-de-filtro-req">strfry: Validação de Filtro REQ&lt;/h3>
&lt;p>O &lt;a href="https://github.com/hoytech/strfry/pull/163">PR #163&lt;/a> adiciona validação configurável de filtro REQ ao &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>, o relay Nostr C++. Operadores podem definir máximo de filtros por REQ, presença obrigatória de autor ou tag, whitelists de kinds permitidos e limites de kinds por filtro. O recurso visa deployments de relay NWC que precisam de enforcement estrito de filtros. Em aberto: &lt;a href="https://github.com/hoytech/strfry/pull/173">PR #173&lt;/a> adiciona compressão zstd opcional para payloads de evento no momento da ingestão.&lt;/p>
&lt;h3 id="rust-nostr-nip-62pttopicsnip-62-request-to-vanish">rust-nostr: &lt;a href="https://nostrcompass.org/pt/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>, a biblioteca de protocolo Nostr em Rust, adicionou suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> (Request to Vanish) em todos os três backends de banco de dados: &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>. A implementação LMDB inclui opções configuráveis para habilitar ou desabilitar enforcement de &lt;a href="https://nostrcompass.org/pt/topics/nip-09/">NIP-09&lt;/a> e NIP-62 por deployment.&lt;/p>
&lt;h3 id="ndk-eventos-colaborativos-e-timeout-nip-46">NDK: Eventos Colaborativos e Timeout NIP-46&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>, o Nostr Development Kit para JavaScript/TypeScript, mergeou o &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/380">PR #380&lt;/a> introduzindo &lt;code>NDKCollaborativeEvent&lt;/code> para documentos colaborativos multi-autor usando um evento ponteiro endereçável (kind 39382) que define autores autorizados. Um timeout configurável para &lt;code>NDKNip46Signer&lt;/code> (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/381">PR #381&lt;/a>) previne que operações de assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> fiquem penduradas indefinidamente quando um bunker não responde.&lt;/p>
&lt;h3 id="tenex-categorização-de-agentes-e-gating-por-pubkey">TENEX: Categorização de Agentes e Gating por Pubkey&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, a plataforma de orquestração de agentes de IA nativa do Nostr, mergeou dois PRs relacionados a segurança. Categorização de agentes baseada em papéis TIP-01 (&lt;a href="https://github.com/tenex-chat/tenex/pull/91">PR #91&lt;/a>) mapeia categorias de agente (principal, orchestrator, worker, advisor, auditor) para restrições automatizadas de ferramentas via um mapa de ferramentas negadas. Gating de pubkey na porta de entrada (&lt;a href="https://github.com/tenex-chat/tenex/pull/87">PR #87&lt;/a>) garante que apenas eventos de pubkeys na whitelist ou assinados pelo backend sejam roteados junto com agentes conhecidos; pubkeys desconhecidas são silenciosamente descartadas com spans OpenTelemetry para auditoria.&lt;/p>
&lt;h3 id="zap-cooking-painel-de-membros">Zap Cooking: Painel de Membros&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>, a plataforma de compartilhamento de receitas baseada no Nostr, mergeou 25 PRs e 85 commits em dez dias. Um painel de membros (&lt;a href="https://github.com/zapcooking/frontend/pull/228">PR #228&lt;/a>) mostra status de assinatura com datas de expiração e opções de gerenciar/upgrade, reabilita gates de recursos para as faixas Sous Chef e Zappy com verificações tanto no lado do cliente quanto no servidor, e padroniza nomenclatura de faixas em 26 arquivos. Carregamento de mensagens de grupo em duas fases (&lt;a href="https://github.com/zapcooking/frontend/pull/227">PR #227&lt;/a>) fornece uma busca inicial rápida de 3 dias para exibição instantânea seguida de um backfill em background de 40 dias.&lt;/p>
&lt;p>O armazenamento de mnemônica de carteira foi movido de criptografia derivada de pubkey para encrypt-to-self &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (&lt;a href="https://github.com/zapcooking/frontend/pull/224">PR #224&lt;/a>), corrigindo uma vulnerabilidade onde o esquema antigo derivava sua chave de &lt;code>SHA-256(pubkey)&lt;/code>, que é efetivamente não criptografado já que pubkeys são públicas. Carteiras existentes são migradas silenciosamente no primeiro carregamento. Chat de grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> ganhou indicadores de não lidos com badges de ponto vermelho e acesso somente por convite com códigos de convite kind 9009 (&lt;a href="https://github.com/zapcooking/frontend/pull/213">PR #213&lt;/a>). Pré-visualizações de links e embeds de eventos Nostr agora renderizam em DMs e mensagens de grupo (&lt;a href="https://github.com/zapcooking/frontend/pull/218">PR #218&lt;/a>). Uma seção de backup Nostr em Configurações (&lt;a href="https://github.com/zapcooking/frontend/pull/210">PR #210&lt;/a>) armazena follows e listas de mute via armazenamento criptografado &lt;a href="https://nostrcompass.org/pt/topics/nip-78/">NIP-78&lt;/a> (Application-specific Data) com versionamento rotativo de 3 slots. O desempenho de inicialização melhorou através de serviços de notificação diferidos, renderização DOM lazy via IntersectionObserver (reduzindo nós DOM de ~15.000 para ~3.000 em um feed de 200 eventos) e TTLs estendidos de cache outbox (&lt;a href="https://github.com/zapcooking/frontend/pull/208">PR #208&lt;/a>). Um modal de impressão de receita personalizável (&lt;a href="https://github.com/zapcooking/frontend/pull/205">PR #205&lt;/a>) permite que usuários alternem quais seções incluir com pré-visualização ao vivo. Integração com &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>) adiciona proteções de verificação para requisições POST e GET.&lt;/p>
&lt;h3 id="keep-migração-de-estado-orientada-por-rust">Keep: Migração de Estado Orientada por Rust&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>, o gerenciador de chaves privadas baseado no Nostr para Android, mergeou o &lt;a href="https://github.com/privkeyio/keep-android/pull/178">PR #178&lt;/a>, deletando quatro stores de configuração Kotlin em favor de estado compartilhado orientado por Rust da camada keep-mobile. Um loop de polling de 10 segundos foi substituído por &lt;code>KeepStateCallback&lt;/code> push-based do Rust. O &lt;a href="https://github.com/privkeyio/keep-android/pull/179">PR #179&lt;/a> adiciona backup e restauração criptografados com proteção por passphrase.&lt;/p>
&lt;h3 id="mostro-mobile-criptografia-de-chat-de-disputa">Mostro Mobile: Criptografia de Chat de Disputa&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, o cliente mobile para a plataforma de trading P2P de Bitcoin Mostro, lançou uma migração em duas fases da criptografia de chat de disputa. O primeiro passo (&lt;a href="https://github.com/MostroP2P/mobile/pull/495">PR #495&lt;/a>) troca de encapsulamento específico do mostro para criptografia de chave compartilhada derivada da pubkey do admin. Construindo sobre isso, o &lt;a href="https://github.com/MostroP2P/mobile/pull/501">PR #501&lt;/a> unifica o modelo de mensagem com &lt;code>NostrEvent&lt;/code> e armazena eventos gift wrap criptografados em disco, consistente com o padrão de chat peer-to-peer. Uma correção de assinatura BIP-340 (&lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a>) sobrescreve a dependência bip340 para 0.2.0, resolvendo um bug de padding &lt;code>bigToBytes()&lt;/code> que causava 1-2% das assinaturas Schnorr serem inválidas e 100% de falha para chaves cuja chave pública começa com &lt;code>0x00&lt;/code>. Detalhes do Pedido agora mostra labels de status legíveis em vez de valores brutos do protocolo, localizados em inglês, espanhol, italiano e francês (&lt;a href="https://github.com/MostroP2P/mobile/pull/502">PR #502&lt;/a>). HalCash foi adicionado e SEPA removido como método de pagamento (&lt;a href="https://github.com/MostroP2P/mobile/pull/493">PR #493&lt;/a>), já que transferências SEPA podem exceder 24 horas (SEPA Instant permanece).&lt;/p>
&lt;p>No lado do servidor, &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> corrigiu a restauração de sessão de disputa para incluir o campo do iniciador (&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>) e agora fecha automaticamente disputas ativas quando um vendedor libera fundos, publicando um evento Nostr de liquidação para que clientes admin vejam a resolução (&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>).&lt;/p>
&lt;h2 id="cinco-anos-de-fevereiros-do-nostr">Cinco Anos de Fevereiros do Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-28-newsletter/#cinco-anos-de-janeiros-do-nostr">A newsletter do mês passado&lt;/a> traçou os marcos de janeiro do Nostr desde o desenvolvimento inicial, passando pela explosão do Damus, até a infraestrutura de segurança em 2026. Esta retrospectiva cobre o que aconteceu em cada fevereiro de 2021 a 2026.&lt;/p>
&lt;h3 id="fevereiro-de-2021-a-reescrita">Fevereiro de 2021: A Reescrita&lt;/h3>
&lt;p>Três meses após sua existência, o fevereiro do Nostr produziu a mudança inicial mais consequente do protocolo. Em 14-15 de fevereiro, fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/33a1a70">reescreveu o NIP-01&lt;/a>, substituindo o formato de mensagem original pelo modelo EVENT/REQ/CLOSE que o protocolo ainda usa. Antes dessa reescrita, clientes e relays se comunicavam através de uma estrutura mais simples. Separar publicação de evento (EVENT) de gerenciamento de assinatura (REQ/CLOSE) habilitou filtragem do lado do relay que se provaria essencial para escalar.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> chegou no mesmo mês, adicionando mensagens diretas criptografadas usando segredos compartilhados derivados de troca de chaves Diffie-Hellman sobre secp256k1. Sua criptografia era básica (AES-256-CBC) e seria depois substituída pela criptografia auditada do &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, mas deu aos poucos usuários iniciais seu primeiro canal de comunicação privada no protocolo.&lt;/p>
&lt;p>O ferramental expandiu com &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a>, um cliente de linha de comando em Go para interação com relays pelo terminal, e futurepaul iniciou &lt;a href="https://github.com/futurepaul/nostr-rs">nostr-rs&lt;/a>, uma implementação inicial em Rust. A rede inteira rodava em dois ou três relays, coordenada através de um &lt;a href="https://t.me/nostr_protocol">grupo no Telegram&lt;/a>, com aproximadamente sete contribuidores ativos.&lt;/p>
&lt;h3 id="fevereiro-de-2022-ganhando-tração">Fevereiro de 2022: Ganhando Tração&lt;/h3>
&lt;p>O &lt;a href="https://news.ycombinator.com/item?id=29749061">post no Hacker News&lt;/a> de 31 de dezembro de 2021 continuou atraindo desenvolvedores em fevereiro. O repositório &lt;a href="https://github.com/nostr-protocol/nostr">nostr-protocol/nostr&lt;/a> (o &lt;a href="https://github.com/nostr-protocol/nips">repositório formal de NIPs&lt;/a> não existiria até maio de 2022) recebeu seis pull requests em fevereiro, incluindo NIP-13 (Proof of Work) de vinliao, NIP-14 (Reputation) de fiatjaf, NIP-15 (Resource Relations) de Cameri e &lt;a href="https://github.com/nostr-protocol/nostr/pull/75">NIP-17&lt;/a> (Git Updates Over Nostr) de melvincarvalho. O número do NIP seria depois reatribuído para Private Direct Messages; colaboração git no Nostr continuou separadamente através do que se tornou &lt;a href="https://gitworkshop.dev">gitworkshop.dev&lt;/a>.&lt;/p>
&lt;p>O &lt;a href="https://github.com/scsibug/nostr-rs-relay">nostr-rs-relay&lt;/a> de Greg Heartsfield foi o cavalo de batalha do mês com 34 commits e três lançamentos. A versão 0.5.0 em 12 de fevereiro adicionou limites de publicação para usuários verificados por &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a>. As versões 0.5.1 e 0.5.2 seguiram nas duas semanas seguintes, e o relay lidou com a maior parte do tráfego da rede sozinho.&lt;/p>
&lt;p>Robert C. Martin (Uncle Bob) estava construindo &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>, um cliente desktop em Clojure, registrando 69 commits entre 18 de janeiro e o final de fevereiro. Seu envolvimento trouxe atenção da comunidade mais ampla de engenharia de software. A extensão de navegador &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> de fiatjaf lançou suporte a descriptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> e políticas de preferência de relay em fevereiro, implementando a interface &lt;code>window.nostr&lt;/code> (&lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>) que clientes web ainda usam para delegação de chaves.&lt;/p>
&lt;p>&lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, ainda o cliente web principal, ganhou registro de handler do protocolo &lt;code>web+nostr&lt;/code> em 13 de fevereiro, uma tentativa inicial de deep linking entre aplicações Nostr. &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> aprimorou a validação NIP-05. &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> adicionou suporte a DM criptografada NIP-04 e parsing NIP-12 (Generic Tag Queries) em 11 commits. A rede operava com aproximadamente 7-15 relays com uma base de usuários ativos provavelmente na casa das baixas centenas. Damus e Nostream ainda não existiam e não apareceriam até abril de 2022.&lt;/p>
&lt;h3 id="fevereiro-de-2023-atenção-internacional">Fevereiro de 2023: Atenção Internacional&lt;/h3>
&lt;p>Fevereiro de 2023 trouxe ao Nostr sua maior onda de atenção pública. &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, o cliente iOS de William Casarin, havia sido &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">aprovado na App Store da Apple em 31 de janeiro&lt;/a> após repetidas rejeições. Em 1º de fevereiro alcançou o top 10 em Redes Sociais nos EUA. Dois dias depois, em 2 de fevereiro, a &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Apple removeu o Damus da App Store da China&lt;/a> supostamente a pedido da Administração do Ciberespaço da China.&lt;/p>
&lt;p>Grandes veículos incluindo TechCrunch e CoinDesk cobriram a remoção, amplificando a conscientização tanto do app quanto do protocolo. Chaves públicas únicas com metadados no nostr.directory ultrapassaram 300.000 em 3 de fevereiro. Todos os relays eram operados por entusiastas pagando do próprio bolso, e a infraestrutura se esforçou para lidar com a carga. Aproximadamente 289 relays eram rastreados no início de fevereiro, número que continuou crescendo.&lt;/p>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a> registrou 29 pull requests mergeados naquele mês, a maior contagem de um único mês na história do protocolo até aquele ponto. &lt;a href="https://github.com/nostr-protocol/nips/pull/224">NIP-57&lt;/a> (Lightning Zaps) e &lt;a href="https://github.com/nostr-protocol/nips/pull/220">NIP-23&lt;/a> (Long-form Content) ambos foram mergeados em 13 de fevereiro, adicionando micropagamentos Bitcoin e expandindo o Nostr além de posts curtos em um único dia. &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> (Relay List Metadata) havia sido mergeado uma semana antes, em 7 de fevereiro, habilitando o modelo outbox que se seguiu. &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (Nostr Connect) e &lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a> (Badges) também foram aprovados antes do fim do mês.&lt;/p>
&lt;p>A Human Rights Foundation &lt;a href="https://hrf.org/devfund2023q1">concedeu US$50.000 a William Casarin para desenvolvimento do Nostr e Damus&lt;/a> em 21 de fevereiro, uma das primeiras bolsas institucionais para um projeto Nostr. A OpenSats ainda não havia lançado seu fundo Nostr (isso viria em &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">julho de 2023&lt;/a>).&lt;/p>
&lt;h3 id="fevereiro-de-2024-durabilidade-do-protocolo">Fevereiro de 2024: Durabilidade do Protocolo&lt;/h3>
&lt;p>Fevereiro de 2024 mudou o foco de crescimento para durabilidade do protocolo. &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (Private Direct Messages), aberto desde julho anterior, estava trabalhando em direção a uma substituição para a envelhecida criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> usando criptografia auditada do &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> e gift wrapping &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>. NIP-04 vazava metadados para operadores de relay, que podiam ver pares remetente-destinatário. NIP-17 esconde a identidade do remetente atrás de pares de chaves descartáveis e foi mergeado na primavera seguinte após uma rodada final de revisão em março.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> (Simple Groups) &lt;a href="https://github.com/nostr-protocol/nips/pull/566">foi mergeado em 28 de fevereiro&lt;/a> após meses de discussão, definindo como relays podem hospedar chats de grupo moderados com papéis de admin e controle de acesso. &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a> (tags imeta) foi mergeado em 1º de fevereiro, padronizando como clientes anexam dimensões de imagem e pré-visualizações blurhash a eventos de mídia.&lt;/p>
&lt;p>Em 16 de fevereiro, o repositório de NIPs adicionou &lt;a href="https://github.com/nostr-protocol/nips/commit/62c48eff">BREAKING.md&lt;/a>, um arquivo rastreando mudanças incompatíveis com versões anteriores na especificação do protocolo. Sua criação reconheceu que o Nostr havia alcançado um nível de maturidade onde mudanças que quebram compatibilidade precisavam de documentação formal.&lt;/p>
&lt;p>Vinte e dois pull requests foram mergeados naquele mês. &lt;a href="https://github.com/cashubtc/npubcash-server">npub.cash&lt;/a> foi lançado como serviço de endereço Lightning permitindo que qualquer npub receba pagamentos sem rodar um servidor. Um &lt;a href="https://arxiv.org/abs/2402.05709">artigo acadêmico&lt;/a> publicado em 8 de fevereiro descobriu que 95% dos relays de uso gratuito não conseguiam cobrir custos operacionais através de doações, com 35% dos relays pagos cobrando taxas de admissão abaixo de 1.000 sats (aproximadamente US$0,45 na época).&lt;/p>
&lt;h3 id="fevereiro-de-2025-crescimento-de-infraestrutura">Fevereiro de 2025: Crescimento de Infraestrutura&lt;/h3>
&lt;p>Fevereiro de 2025 produziu 28 pull requests mergeados no repositório de NIPs. Um NIP de &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">Direito ao Desaparecimento&lt;/a> foi mergeado em 19 de fevereiro, definindo como usuários podem solicitar a exclusão de seus dados dos relays em resposta a questões regulatórias sobre portabilidade de dados e controle do usuário.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a> (Cashu Wallet) e NIP-61 (Nutzaps) receberam atualizações de simplificação, otimizando o formato de armazenamento de tokens ecash. Um rollout de q-tag (quote tag) continuou em múltiplos NIPs, padronizando como eventos referenciam outros eventos para citação e threading.&lt;/p>
&lt;p>Lançamentos de clientes marcaram progresso constante. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> v0.3.0 alpha foi lançado no último dia de janeiro, com adoção continuando em fevereiro. Primal v2.1 seguiu em 7 de fevereiro, e &lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> v0.3.0, uma implementação de relay em Go, foi lançado em 21 de fevereiro.&lt;/p>
&lt;p>NOSTRLDN v5 reuniu a comunidade Nostr de Londres para seu quinto meetup. Uma ponte DVMCP conectou as Data Vending Machines do Nostr (&lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a>) com o Model Context Protocol, prefigurando o trabalho de integração de agentes de IA que chegaria no mês seguinte.&lt;/p>
&lt;h3 id="fevereiro-de-2026-além-das-redes-sociais">Fevereiro de 2026: Além das Redes Sociais&lt;/h3>
&lt;p>&lt;em>A atividade de fevereiro de 2026 é extraída das edições do Nostr Compass &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/">#8&lt;/a> a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/">#11&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Fevereiro de 2026 produziu a mais ampla gama de desenvolvimento na camada de aplicação em qualquer mês do Nostr. &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> lançou seu &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#mostro-lan%C3%A7a-primeiro-beta-p%C3%BAblico">primeiro beta público&lt;/a> para trading descentralizado peer-to-peer de Bitcoin, e &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> alcançou a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#zapstore-v100">versão 1.0 estável&lt;/a> após meses em teste de release candidate. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> entregou mensagens em tempo real criptografadas com &lt;a href="https://nostrcompass.org/pt/topics/mls/">Marmot&lt;/a> com suporte ao assinador Amber e mais de 160 melhorias mergeadas.&lt;/p>
&lt;p>Propostas concorrentes de agentes de IA de pablof7z (NIP-AE para fluxos de trabalho de agentes, NIP-AD para anúncios de servidores MCP) e joelklabo (AI Agent Messages) chegaram junto com uma &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#atualiza%C3%A7%C3%B5es-de-nips">proposta de Coordenação de Agentes DVM&lt;/a> estendendo &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a>. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#contextvm-mcp-sobre-nostr">ContextVM&lt;/a> lançou melhorias no SDK conectando o Model Context Protocol ao transporte Nostr. &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#burrow-mensagens-mls-para-agentes-de-ia">Burrow&lt;/a> adicionou mensagens criptografadas com &lt;a href="https://nostrcompass.org/pt/topics/mls/">Marmot&lt;/a> tanto para agentes de IA quanto humanos, estendendo a identidade e infraestrutura de relay do Nostr para comunicação máquina-a-máquina.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#fips-redes-mesh-nativas-do-nostr">FIPS&lt;/a> lançou uma implementação Rust funcional de redes mesh nativas do Nostr, usando pares de chaves secp256k1 como identidades de nó com roteamento agnóstico de transporte sobre UDP, Ethernet, Bluetooth ou rádio LoRa. Seu design mostrou que o modelo de chaves do Nostr se estende além das redes sociais para infraestrutura de rede física.&lt;/p>
&lt;p>A &lt;a href="https://opensats.org/blog/fifteenth-wave-of-nostr-grants">OpenSats anunciou sua décima quinta onda de bolsas Nostr&lt;/a>, financiando projetos incluindo ContextVM e Nostube. Mudanças de protocolo incluíram suporte a hold invoice do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> para Nostr Wallet Connect e HyperLogLog do &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a> (Counting Results) para estimativa de contagem do lado do relay. A descobribilidade de provedores de serviço do &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> (Trusted Assertions) para pontuação de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> também foi mergeada. &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> iniciou um redesign completo de API enquanto Nostria 3.0 e &lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (iOS TestFlight) ambos foram lançados. A camada de cache local do &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> tratou a disponibilidade de mídia entre relays.&lt;/p>
&lt;h3 id="olhando-para-frente">Olhando para Frente&lt;/h3>
&lt;p>Cinco fevereiros de história do protocolo mostram uma progressão consistente de trabalho fundacional para diversificação na camada de aplicação, com o influxo de usuários de 2023 como ponto de virada. Em 2021, sete contribuidores trabalhavam em três relays. Em 2026, o mesmo protocolo suportava redes mesh e propostas de agentes autônomos rodando em infraestrutura de produção.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Construindo algo ou tem novidades para compartilhar? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #11</title><link>https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o 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> traz mensagens em tempo real e suporte ao assinador Amber com mais de 160 melhorias mergeadas. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> corrige problemas de reprodução de vídeo e adiciona eventos de visualização Kind 22236 para análises do criador. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> e &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> lançam atualizações. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lança uma implementação Rust funcional de redes mesh nativas do Nostr. Notecrumbs recebe correções de estabilidade para pré-visualizações de links do damus.io. &lt;a href="https://contextvm.org">ContextVM&lt;/a> faz ponte entre o Nostr e o Model Context Protocol. Novos projetos incluem &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> para mensagens criptografadas com MLS entre agentes de IA e humanos, e &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> para gerenciamento de cofre e identidade baseado em navegador. Os deep dives cobrem NIP-55 para assinatura no Android e NIP-60 para sincronização de carteira Cashu.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o 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> traz mensagens em tempo real e suporte ao assinador Amber com mais de 160 melhorias mergeadas. &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> corrige problemas de reprodução de vídeo e adiciona eventos de visualização Kind 22236 para análises do criador. &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>, &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> e &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> lançam atualizações. &lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> lança uma implementação Rust funcional de redes mesh nativas do Nostr. Notecrumbs recebe correções de estabilidade para pré-visualizações de links do damus.io. &lt;a href="https://contextvm.org">ContextVM&lt;/a> faz ponte entre o Nostr e o Model Context Protocol. Novos projetos incluem &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> para mensagens criptografadas com MLS entre agentes de IA e humanos, e &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> para gerenciamento de cofre e identidade baseado em navegador. Os deep dives cobrem NIP-55 para assinatura no Android e NIP-60 para sincronização de carteira Cashu.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="melhorias-de-estabilidade-no-notecrumbs">Melhorias de Estabilidade no Notecrumbs&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs">Notecrumbs&lt;/a>, a API Nostr e servidor web que alimenta as pré-visualizações de links do damus.io, recebeu uma série de correções tratando problemas de confiabilidade.&lt;/p>
&lt;p>Uma &lt;a href="https://github.com/damus-io/notecrumbs/commit/3f201f63ea49">correção de concorrência&lt;/a> substituiu o mecanismo de deduplicação em voo por watch channels. Dois chamadores solicitando a mesma nota poderiam ambos se tornar buscadores, levando a um deadlock quando um completava antes que o outro se inscrevesse na notificação. Watch channels com operações atômicas garantem que apenas um buscador execute enquanto outros aguardam o resultado.&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17">Limitação de taxa&lt;/a> implementa uma defesa em duas camadas contra martelo de relay. Quando usuários acessam repetidamente a mesma nota, o sistema agora faz debounce de requisições ao relay com uma janela de cooldown de 5 minutos. Essa proteção se estende a todos os tipos &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> e feeds de perfil, prevenindo spam proporcional aos relays durante tráfego intenso.&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/38670b3972b6">Melhorias de desempenho&lt;/a> moveram buscas de dados secundários para tarefas tokio em background. As páginas agora renderizam instantaneamente com dados em cache em vez de bloquear em timeouts sequenciais de relay que poderiam somar até 7,5 segundos. Uma atualização para nostrdb 0.10.0 acompanhou essas correções.&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> é um conjunto de ferramentas que faz ponte entre o Nostr e o &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> (MCP). Commits recentes introduziram a nova spec &lt;a href="https://docs.contextvm.org/spec/ceps/cep-8/">CEP-8&lt;/a> habilitando pagamentos, e têm impulsionado melhorias no &lt;a href="https://github.com/ContextVM/sdk">SDK&lt;/a> ao longo de fevereiro.&lt;/p>
&lt;p>O SDK fornece transportes cliente e servidor TypeScript para MCP sobre Nostr. Desenvolvedores podem expor servidores MCP através da rede Nostr e clientes podem se conectar a eles. Relays agem como um barramento de mensagens cego, apenas roteando eventos criptografados cegamente. Clientes sem suporte nativo ao Nostr se conectam através de uma camada de proxy. A biblioteca lida com gerenciamento de relay e assinatura criptográfica para autenticação de eventos. Funciona tanto em ambientes Node.js quanto de navegador.&lt;/p>
&lt;p>&lt;a href="https://github.com/ContextVM/cvmi">CVMI&lt;/a> fornece uma CLI para descoberta de servidores e invocação de métodos. &lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a> calcula pontuações de confiança personalizadas a partir da distância no grafo social combinada com validação de perfil.&lt;/p>
&lt;p>ContextVM se posiciona como uma camada de ponte: servidores MCP existentes ganham interoperabilidade com Nostr enquanto mantêm seus transportes convencionais.&lt;/p>
&lt;h3 id="white-noise-documenta-busca-descentralizada-de-usuários">White Noise Documenta Busca Descentralizada de Usuários&lt;/h3>
&lt;p>Um &lt;a href="https://blog.jgmontoya.com/2026/02/22/user-search.html">post de blog de jgmontoya&lt;/a> detalha como &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> lida com a busca de usuários através da rede de relays descentralizada.&lt;/p>
&lt;p>A distribuição de perfis cria o desafio: diferente de mensageiros centralizados com bancos de dados unificados, os perfis Nostr se espalham por dezenas de relays sem índice central. White Noise resolve isso através de uma arquitetura produtor-consumidor rodando em paralelo.&lt;/p>
&lt;p>Um processo produtor expande continuamente o grafo social para fora a partir dos follows do usuário, buscando listas de follows em distâncias crescentes e enfileirando pubkeys descobertos para resolução de perfil. O consumidor resolve matches através de cinco camadas crescentemente caras: tabela de usuário local (mais rápido), perfis em cache de buscas anteriores, relays conectados, listas de relay de usuários por &lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a> e consultas diretas a relays declarados pelo usuário (mais lento).&lt;/p>
&lt;p>Buscas frias levam aproximadamente 3 segundos enquanto buscas quentes do cache caem para cerca de 10 milissegundos. Para novos usuários sem grafos sociais estabelecidos, o sistema injeta nós bootstrap bem conectados para garantir funcionalidade de busca. A participação em grupos fornece um sinal social implícito ao lado de follows explícitos.&lt;/p>
&lt;p>Instrumentação provou ser crítica para otimização, observa o autor. Sem métricas, melhorias eram adivinhação.&lt;/p>
&lt;h3 id="fips-redes-mesh-nativas-do-nostr">FIPS: Redes Mesh Nativas do Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> (Free Internetworking Peering System) é uma implementação Rust funcional de uma rede mesh auto-organizável que usa pares de chaves Nostr (secp256k1) como identidades de nó. A &lt;a href="https://github.com/jmcorgan/fips/blob/master/docs/design/fips-intro.md">documentação de design&lt;/a> acompanha o código funcional.&lt;/p>
&lt;p>O protocolo trata da independência de infraestrutura: nós se descobrem automaticamente sem servidores centrais ou autoridades de certificação. Uma árvore de cobertura fornece roteamento baseado em coordenadas enquanto filtros bloom propagam informações de alcançabilidade, deixando os nós tomarem decisões de encaminhamento com apenas conhecimento local. Agnosticismo de transporte significa que o mesmo protocolo funciona sobre UDP, Ethernet ou Bluetooth. Também suporta rádio LoRa ou qualquer meio capaz de datagramas.&lt;/p>
&lt;p>Duas camadas protegem o tráfego. Link-layer encryption (padrão Noise IK) protege a comunicação salto por salto entre vizinhos com autenticação mútua e sigilo futuro. Session-layer encryption (padrão Noise XK) fornece proteção ponta a ponta contra roteadores intermediários, onde apenas o destino pode descriptografar a carga útil. Isso espelha como TLS protege o tráfego HTTP mesmo ao atravessar redes não confiáveis.&lt;/p>
&lt;p>A arquitetura usa uma árvore de cobertura &amp;ldquo;greedy embedding&amp;rdquo; para roteamento. Cada nó recebe coordenadas baseadas em sua posição relativa à raiz da árvore e ao pai. Pacotes roteiam gananciamente em direção a coordenadas mais próximas do destino, com filtros bloom anunciando endpoints alcançáveis. Quando o roteamento ganancioso falha (mínimos locais), nós podem recorrer a caminhos baseados em árvore.&lt;/p>
&lt;p>A implementação Rust já inclui transporte UDP com descoberta por filtro bloom. Trabalho futuro visa integração com relay Nostr para bootstrapping de pares.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;p>Esta semana trouxe lançamentos através da infraestrutura de relay e aplicações cliente, com novos projetos também entrando no espaço.&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>, o relay pessoal tudo-em-um reunindo quatro funções de relay com um servidor de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>, lançou &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0">v1.2.0&lt;/a>. Este lançamento vai além do estágio RC &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#haven-v120-rc3">coberto na semana passada&lt;/a>.&lt;/p>
&lt;p>Suporte a múltiplos npubs permite que uma única instância HAVEN sirva várias identidades Nostr através de whitelisting, com nova funcionalidade de blacklist para controle de acesso. Um sistema de backup reescrito usa formato JSONL portátil, com um comando &lt;code>haven restore&lt;/code> para importar notas de arquivos JSONL. Integração com armazenamento em nuvem adiciona flags &lt;code>--to-cloud&lt;/code> e &lt;code>--from-cloud&lt;/code> para gerenciamento de backup remoto.&lt;/p>
&lt;p>Melhorias de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> incluem níveis de profundidade configuráveis para cálculos de confiança e intervalos automáticos de atualização de 24 horas com otimização sem bloqueio reduzindo overhead de memória. Configuração de user-agent para requisições de relay, configurações de timeout do Blastr e exportação de dados para JSONL compactado completam o lançamento.&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>, o app de mensagens criptografadas baseado em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> implementando o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, lançou &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">v0.3.0&lt;/a> com mais de 160 melhorias mergeadas.&lt;/p>
&lt;p>Este lançamento traz mensagens em tempo real através de conexões de streaming em vez de polling, então mensagens chegam instantaneamente. Suporte ao Amber (&lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>) significa que chaves privadas nunca precisam tocar o app. Compartilhamento de imagem agora funciona com rastreamento de progresso de upload e placeholders blurhash durante o carregamento. Visualização em tela cheia suporta pinça para zoom.&lt;/p>
&lt;p>Mensagens de grupo receberam melhorias de confiabilidade com listas de chat mostrando nomes de remetentes. A criptografia &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> garante sigilo futuro. Busca de usuário se expande para fora dos follows até quatro graus de separação com resultados chegando em streaming conforme encontrados.&lt;/p>
&lt;p>Uma mudança que quebra compatibilidade reseta todos os dados locais no upgrade devido a mudanças no protocolo Marmot e a mudança para armazenamento local criptografado. Usuários devem fazer backup das chaves nsec antes de atualizar.&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>, o cliente de vídeo de loop curto construído sobre arquivos Vine restaurados, lançou &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">1.0.5&lt;/a> com extensas correções de reprodução de vídeo e um novo sistema de análises descentralizado.&lt;/p>
&lt;p>Problemas de reprodução de vídeo dominaram as correções. Pausa fantasma está resolvida. Áudio duplo entre vídeos está corrigido. Flash preto entre miniaturas e primeiros quadros foi eliminado, e crashes de player descartado não ocorrem mais. Um player de vídeo em pool agora lida com o feed Home para reprodução consistente.&lt;/p>
&lt;p>Eventos de visualização efêmeros Kind 22236 habilitam análises de criador e recomendações. O sistema rastreia fontes de tráfego (home, variantes de descoberta, perfil, compartilhamento e busca) junto com contagens de loop enquanto filtra auto-visualizações. Vazamentos de caminho de arquivo local em tags imeta de eventos Nostr são corrigidos com URLs Blossom canônicas construídas no lado do cliente por spec BUD-01.&lt;/p>
&lt;p>Melhorias no assinador remoto &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> incluem conexões de relay paralelizadas e suporte a URL de callback. Android reconecta conexões WebSocket ao retomar app após aprovação do assinador.&lt;/p>
&lt;p>O Coracle também recebeu uma atualização esta semana.&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>, o cliente Nostr baseado em web focado em gerenciamento de relay e moderação por &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a>, lançou &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.30">0.6.30&lt;/a> com suporte a miniaturas de vídeo, melhorando a navegação de mídia nos feeds.&lt;/p>
&lt;p>Nostur trouxe novos recursos para iOS.&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>, o cliente Nostr para iOS, lançou &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.26.0">v1.26.0&lt;/a> com uma nova seção de feed de Transmissões Ao Vivo e uma tela de Configurações redesenhada. GIFs agora podem hospedar em servidores de mídia Blossom, reduzindo dependência de serviços centralizados. Integração com Klipy GIFs fornece backup quando Tenor fica indisponível. Cabeçalhos de ano em conversas de DM e exibição de contagem de menções completam as mudanças voltadas ao usuário.&lt;/p>
&lt;p>Ferramental para desenvolvedores e apps CLI também receberam atualizações 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>, o canivete suíço de linha de comando para Nostr de fiatjaf, lançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.5">v0.18.5&lt;/a> com um novo subcomando &lt;code>nak profile&lt;/code> para buscar e exibir perfis de usuário. O comando &lt;code>git clone&lt;/code> agora suporta nomes &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> em URIs &lt;code>nostr://&lt;/code>, habilitando clonagem de repositório por identificadores legíveis por humanos.&lt;/p>
&lt;p>Pika trouxe melhorias para seu mensageiro multiplataforma.&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>, o mensageiro criptografado com &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> para iOS, Android e desktop construído sobre o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, lançou &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v0.5.3">v0.5.3&lt;/a>. Commits recentes adicionam upload de arquivo ao app desktop. Suporte a arrastar e soltar mídia também chegou. Correções de deploy no Cloudflare Workers completam a atualização.&lt;/p>
&lt;p>Pika usa um núcleo Rust que possui toda a lógica de negócio enquanto iOS (SwiftUI) e Android (Kotlin) agem como camadas finas de UI renderizando snapshots de estado. MDK (Marmot Development Kit) fornece a implementação MLS. O projeto nota status alfa e alerta contra uso para cargas de trabalho sensíveis.&lt;/p>
&lt;p>Ridestr melhorou sua plataforma de carona descentralizada.&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>, a plataforma de carona descentralizada com pagamentos Cashu, lançou &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.6">v0.2.6&lt;/a>. Este lançamento corrige problemas de acessibilidade TalkBack. Resolve bugs onde motoristas desapareciam da lista próxima ao trocar métodos de pagamento. Também corrige falhas de atualização de contagem quando motoristas ficavam offline.&lt;/p>
&lt;p>O recurso &amp;ldquo;Enviar para Todos&amp;rdquo; agora é &amp;ldquo;Broadcast RoadFlare&amp;rdquo; com correções para falhas silenciosas em instalações frescas de motorista. Ridestr implementa escrow HTLC para pagamentos de carona sem confiança e sincronização de carteira &lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a> entre dispositivos.&lt;/p>
&lt;p>Unfiltered expandiu seu app de fotos para Android.&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>, o app de compartilhamento de fotos estilo Instagram para Android, lançou &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.6">v1.0.6&lt;/a> com busca de usuário melhorada e reconexão automática de relay a cada 60 segundos.&lt;/p>
&lt;p>Construído com Kotlin e Jetpack Compose, Unfiltered usa bindings rust-nostr e servidores compatíveis com Blossom para hospedagem de imagem. Integração com Amber (&lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>) lida com gerenciamento seguro de chaves. O app mostra posts de contas seguidas em ordem cronológica sem algoritmos ou anúncios.&lt;/p>
&lt;p>Dois novos projetos de mensagens e assinatura também foram lançados esta semana.&lt;/p>
&lt;h3 id="burrow-mensagens-mls-para-agentes-de-ia">Burrow: Mensagens MLS para Agentes de IA&lt;/h3>
&lt;p>&lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> é um mensageiro implementando o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> para comunicação criptografada com MLS sem números de telefone ou servidores centralizados. Tanto usuários humanos quanto agentes de IA podem participar.&lt;/p>
&lt;p>Um daemon CLI Rust puro com modo de saída JSONL lida com integração com sistemas automatizados. Um app Flutter multiplataforma cobre Android, iOS e Linux. Também suporta macOS e Windows. Anexos de mídia criptografam ao lado de mensagens, e WebRTC lida com chamadas de áudio e vídeo com servidores TURN configuráveis.&lt;/p>
&lt;p>Burrow camada criptografia MLS sobre infraestrutura Nostr. Identidade usa pares de chaves Nostr (secp256k1) enquanto MLS KeyPackages publicam como eventos kind 443. Mensagens criptografam com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> como eventos kind 445, e convites de boas-vindas usam gift-wrapping &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>.&lt;/p>
&lt;p>Integração com &lt;a href="https://openclaw.ai">OpenClaw&lt;/a> habilita participação de agente de IA com acesso completo a ferramentas. Listas de controle de acesso com registro de auditoria gerenciam permissões de contato e grupo. Essa combinação posiciona Burrow para cenários de mensagens agente-para-agente e agente-para-humano exigindo criptografia nível Signal sobre infraestrutura descentralizada.&lt;/p>
&lt;p>Nostria Signer trouxe gerenciamento de identidade para navegadores.&lt;/p>
&lt;h3 id="extensão-nostria-signer">Extensão Nostria Signer&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> é uma extensão de navegador baseada em Chromium fornecendo gerenciamento de cofre e identidade para usuários Nostr.&lt;/p>
&lt;p>Múltiplos cofres contendo múltiplas contas permitem usuários organizarem identidades para contextos diferentes. Internacionalização inclui suporte a idiomas RTL. Construído com Angular e TypeScript (79,2% do código), funciona tanto como extensão de navegador quanto Progressive Web App.&lt;/p>
&lt;p>Nostria Signer implementa &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a> para assinatura de extensão de navegador, habilitando clientes Nostr baseados em web a solicitar assinaturas de eventos sem acessar chaves privadas diretamente. Migração automática de carteira lida com atualizações distribuídas através da Chrome Web Store. Usuários também podem fazer sideload da pasta &lt;code>dist/extension&lt;/code>.&lt;/p>
&lt;p>Desenvolvedores enfatizam o status experimental: usuários devem gerenciar suas próprias frases de recuperação secreta já que os desenvolvedores não podem restaurar acesso a chaves perdidas.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="formstr-migra-para-nova-organização">Formstr Migra para Nova Organização&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>, a alternativa ao Google Forms no Nostr, migrou seu repositório de &lt;code>abh3po/nostr-forms&lt;/code> para a organização &lt;code>formstr-hq&lt;/code>. Este beneficiário de subsídio OpenSats continua desenvolvimento no novo local.&lt;/p>
&lt;h3 id="prs-abertos-notáveis">PRs Abertos Notáveis&lt;/h3>
&lt;p>Trabalho em progresso através de projetos Nostr:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Damus Outbox Model&lt;/strong> (&lt;a href="https://github.com/damus-io/damus/pull/3602">PR #3602&lt;/a>): Plano de implementação para o modelo de relay gossip/outbox no iOS. Essa mudança arquitetural melhora entrega de mensagem publicando aos relays onde destinatários realmente leem.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Notedeck Cross-Platform Notifications&lt;/strong> (&lt;a href="https://github.com/damus-io/notedeck/pull/1296">PR #1296&lt;/a>): Sistema de notificação nativo para o cliente desktop Damus cobrindo Android FCM, macOS e Linux.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NDK Cashu v3 Upgrade&lt;/strong> (&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/370">PR #370&lt;/a>): Atualiza a integração de carteira do Nostr Development Kit para cashu-ts v3.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Zeus Cashu Offline&lt;/strong> (&lt;a href="https://github.com/ZeusLN/zeus/pull/3742">PR #3742&lt;/a>): Envio e recebimento de ecash offline para a carteira Lightning Zeus.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Shopstr Encrypted Digital Delivery&lt;/strong> (&lt;a href="https://github.com/shopstr-eng/shopstr/pull/231">PR #231&lt;/a>): Adiciona entrega criptografada para bens digitais com suporte a peso dinâmico para itens físicos.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado Esta Semana:&lt;/strong>&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85 Service Provider Discoverability&lt;/a>&lt;/strong>: A spec &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85&lt;/a> agora inclui orientação sobre como clientes descobrem provedores de asserção confiáveis. Quando um cliente precisa de pontuações de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> ou outras métricas computadas, pode consultar relays por anúncios kind 30085 de provedores que o usuário já segue ou confia.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2229">NIP-29 Removes Unmanaged Groups&lt;/a>&lt;/strong>: A spec de chat de grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> descartou suporte para grupos não gerenciados (onde qualquer membro poderia adicionar outros). Todos os grupos NIP-29 agora exigem gerenciamento no lado do relay com papéis de admin explícitos, simplificando implementações e reduzindo vetores de spam.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2231">NIP-11 Removes Deprecated Fields&lt;/a>&lt;/strong>: Documentos de informação de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> não incluem mais os campos depreciados &lt;code>software&lt;/code> e &lt;code>version&lt;/code>. Implementações devem remover esses de suas respostas.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2227">NIP-39 Moves Identity Tags&lt;/a>&lt;/strong>: Reivindicações de identidade externa (tags &lt;code>i&lt;/code> &lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> para GitHub, Twitter, etc.) moveram de perfis kind 0 para eventos dedicados kind 30382. Isso separa verificação de identidade de metadados de perfil.&lt;/p>
&lt;p>&lt;strong>Progresso de NIPs de Agentes de IA:&lt;/strong>&lt;/p>
&lt;p>Quatro NIPs focados em IA continuam desenvolvimento ativo. Desde a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#nips-de-agentes-de-ia-chegam">cobertura da semana passada&lt;/a>:&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: Agents&lt;/a>&lt;/strong> (atualizado 19 fev): Define identidade de agente com kind 4199 para definições de agente e kind 4201 para prompting (&amp;ldquo;nudges&amp;rdquo;). Agentes podem referenciar metadados de arquivo &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> para descrições estendidas.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX: AI Agent Messages&lt;/a>&lt;/strong> (atualizado 18 fev): Padroniza mensagens conversacionais com sete kinds de evento efêmeros (25800-25806) para status, deltas de streaming, prompts e respostas. Também cobre chamadas de ferramenta, erros e cancelamento. Eventos &amp;ldquo;AI Info&amp;rdquo; kind 31340 permitem agentes anunciarem modelos e capacidades suportados.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2228">NIP-AC: DVM Agent Coordination&lt;/a>&lt;/strong> (aberto 18 fev): Estende &lt;a href="https://nostrcompass.org/pt/topics/nip-90/">NIP-90&lt;/a> para fluxos de trabalho de agente autônomo. Adiciona heartbeats para descoberta de agente. Inclui revisões de trabalho para rastreamento de qualidade. Fornece escrow de dados para comprometimento de resultado, cadeias de fluxo de trabalho para pipelines de múltiplas etapas e licitação em enxame para seleção competitiva de provedor. Uma implementação de referência roda em 2020117.xyz.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP Server Announcements&lt;/a>&lt;/strong> (aberto 12 fev): Padroniza anúncio de servidores Model Context Protocol e habilidades no Nostr. Já em uso na plataforma TENEX.&lt;/p>
&lt;p>&lt;strong>Outros PRs Abertos:&lt;/strong>&lt;/p>
&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 como clientes provam identidade e permissões a provedores de serviço no Nostr.&lt;/p>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2230">NIP-DC: Nostr Webxdc&lt;/a>&lt;/strong>: alexgleason propõe integrar Webxdc (aplicações web descentralizadas) com eventos Nostr.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-55-android-signer-application">Deep Dive de NIP: NIP-55 (Android Signer Application)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/55.md">NIP-55&lt;/a> define como clientes Nostr Android solicitam operações criptográficas de aplicações assinadoras dedicadas. Com &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered v1.0.6&lt;/a> ambos adicionando suporte ao Amber esta semana, o protocolo de assinatura Android merece exame.&lt;/p>
&lt;p>&lt;strong>Canais de Comunicação:&lt;/strong>&lt;/p>
&lt;p>NIP-55 habilita assinatura entre apps através de dois mecanismos. Intents fornecem aprovação manual do usuário com feedback visual para operações únicas. Content Resolvers habilitam assinatura automatizada quando usuários concedem permissões persistentes, deixando apps assinarem em background sem prompts repetidos.&lt;/p>
&lt;p>Comunicação usa o esquema URI personalizado &lt;code>nostrsigner:&lt;/code>. Um cliente inicia contato com:&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>Operações Suportadas:&lt;/strong>&lt;/p>
&lt;p>A spec define sete métodos criptográficos: assinatura de evento (&lt;code>sign_event&lt;/code>) e recuperação de chave pública (&lt;code>get_public_key&lt;/code>). Também oferece criptografia/descriptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> e criptografia/descriptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>. Por fim, inclui descriptografia de evento zap (&lt;code>decrypt_zap_event&lt;/code>).&lt;/p>
&lt;p>&lt;strong>Modelo de Permissão:&lt;/strong>&lt;/p>
&lt;p>Clientes chamam &lt;code>get_public_key&lt;/code> uma vez para estabelecer uma relação de confiança, recebendo o nome de pacote do assinador e pubkey do usuário. A spec determina que clientes salvem esses valores e nunca chamem &lt;code>get_public_key&lt;/code> novamente, prevenindo ataques de fingerprinting.&lt;/p>
&lt;p>Para requisições de assinatura, usuários podem aprovar uma vez ou conceder &amp;ldquo;lembrar minha escolha&amp;rdquo; para operações em background. Se usuários consistentemente rejeitam operações, o assinador retorna um status &amp;ldquo;rejeitado&amp;rdquo;, prevenindo prompts repetidos.&lt;/p>
&lt;p>&lt;strong>Implementações:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> é o assinador NIP-55 primário para Android. Clientes suportando NIP-55 incluem &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered&lt;/a>, entre outros. Aplicações web não podem receber respostas do assinador diretamente e devem usar URLs de callback ou operações de clipboard.&lt;/p>
&lt;p>&lt;strong>Relação com Outros NIPs de Assinatura:&lt;/strong>&lt;/p>
&lt;p>NIP-55 complementa &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a> (extensões de navegador) e &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (assinatura remota sobre relays). Onde NIP-07 lida com navegadores desktop e NIP-46 lida com assinatura entre dispositivos, NIP-55 fornece integração nativa Android com latência mínima.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-60-cashu-wallet">Deep Dive de NIP: NIP-60 (Cashu Wallet)&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/60.md">NIP-60&lt;/a> define como carteiras ecash &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> armazenam estado em relays Nostr, habilitando sincronização de carteira entre aplicações. Com &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr v0.2.6&lt;/a> usando NIP-60 para sincronização de carteira entre dispositivos, o protocolo merece exame.&lt;/p>
&lt;p>&lt;strong>Kinds de Evento:&lt;/strong>&lt;/p>
&lt;p>NIP-60 usa quatro tipos de evento. O kind substituível 17375 armazena configuração de carteira incluindo URLs de mint e uma chave privada dedicada para receber pagamentos ecash P2PK. Eventos de token (kind 7375) contêm provas criptográficas não gastas, enquanto histórico de gastos (kind 7376) registra transações para transparência do usuário. Um kind opcional 7374 rastreia cotações de pagamento de mint.&lt;/p>
&lt;p>&lt;strong>Arquitetura de Carteira:&lt;/strong>&lt;/p>
&lt;p>Estado de carteira vive em relays, tornando-o acessível através de aplicações. Um evento de carteira do usuário contém referências criptografadas a mints Cashu e uma chave privada específica da carteira separada da identidade Nostr do usuário. Essa separação importa: a chave da carteira lida com operações ecash enquanto a chave Nostr lida com funções sociais.&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;config-carteira-criptografado-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>Gerenciamento de Prova:&lt;/strong>&lt;/p>
&lt;p>Provas Cashu são instrumentos ao portador. Uma vez gasta, uma prova se torna inválida. NIP-60 gerencia isso através de um mecanismo de rollover: ao gastar, clientes criam um novo evento de token com provas não gastas restantes e deletam o original via &lt;a href="https://nostrcompass.org/pt/topics/nip-09/">NIP-09&lt;/a>. IDs de token destruídos vão em um campo &lt;code>del&lt;/code> para rastreamento de estado.&lt;/p>
&lt;p>Clientes devem periodicamente validar provas contra mints para detectar credenciais previamente gastas. Múltiplos eventos de token por mint são permitidos, e eventos de histórico de gastos ajudam usuários a rastrear transações mesmo sendo opcionais.&lt;/p>
&lt;p>&lt;strong>Modelo de Segurança:&lt;/strong>&lt;/p>
&lt;p>Todos os dados sensíveis usam criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>. A chave privada da carteira nunca aparece em texto claro. Como relays armazenam blobs criptografados sem entender seus conteúdos, o estado da carteira permanece privado mesmo em relays não confiáveis.&lt;/p>
&lt;p>&lt;strong>Implementações:&lt;/strong>&lt;/p>
&lt;p>Carteiras suportando NIP-60 incluem &lt;a href="https://github.com/gandlafbtc/nutsack">Nutsack&lt;/a> e &lt;a href="https://github.com/cashubtc/eNuts">eNuts&lt;/a>. Clientes como &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr&lt;/a> usam NIP-60 para sincronização entre dispositivos, deixando usuários recarregarem no desktop e gastarem do mobile sem transferências manuais.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Construindo algo ou tem novidades para compartilhar? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #10</title><link>https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Uma camada de cache local do Blossom toma forma à medida que projetos independentes convergem para acesso offline a mídia no Android. Alby lança um &lt;a href="https://sandbox.albylabs.com">sandbox para desenvolvedores NWC&lt;/a> para criar e testar integrações de Nostr Wallet Connect sem arriscar fundos reais. Propostas concorrentes para comunicação de agentes de IA no Nostr chegam na mesma semana de dois autores diferentes. fiatjaf remove campos não utilizados do &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>, eliminando políticas de retenção, códigos de país, política de privacidade e tags de preferência de comunidade que operadores de relay nunca adotaram. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> faz merge com orientações de descoberta de provedores de serviço para Trusted Assertions. Uma nova tag &lt;code>D&lt;/code> no &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> habilita indexação temporal com granularidade de dia para eventos de calendário. Novos projetos incluem &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> para distribuição descentralizada de tiles de mapa, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> para mensagens criptografadas com MLS, &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> para assinatura de limiar FROST no Android, &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> para armazenamento endereçado por conteúdo com integração Nostr, e &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> para compartilhar conteúdo no Nostr a partir de qualquer app Android. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> faz merge de 11 PRs de NWC adicionando suporte a carteira dupla e ciclo de vida automático do serviço. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> lança &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">carteira Lightning embutida&lt;/a> via integração NWC. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> se prepara para lançamento na Android App Store enquanto o HAVEN alcança &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a> com suporte a múltiplos npubs e backup em nuvem. Os deep dives desta semana cobrem o sistema de Trusted Assertions do NIP-85 para delegar cálculos de Web of Trust a provedores de serviço, e o protocolo de Eventos de Calendário do NIP-52 após sua atualização de indexação com granularidade de dia.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Uma camada de cache local do Blossom toma forma à medida que projetos independentes convergem para acesso offline a mídia no Android. Alby lança um &lt;a href="https://sandbox.albylabs.com">sandbox para desenvolvedores NWC&lt;/a> para criar e testar integrações de Nostr Wallet Connect sem arriscar fundos reais. Propostas concorrentes para comunicação de agentes de IA no Nostr chegam na mesma semana de dois autores diferentes. fiatjaf remove campos não utilizados do &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a>, eliminando políticas de retenção, códigos de país, política de privacidade e tags de preferência de comunidade que operadores de relay nunca adotaram. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> faz merge com orientações de descoberta de provedores de serviço para Trusted Assertions. Uma nova tag &lt;code>D&lt;/code> no &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> habilita indexação temporal com granularidade de dia para eventos de calendário. Novos projetos incluem &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> para distribuição descentralizada de tiles de mapa, &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> para mensagens criptografadas com MLS, &lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> para assinatura de limiar FROST no Android, &lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> para armazenamento endereçado por conteúdo com integração Nostr, e &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> para compartilhar conteúdo no Nostr a partir de qualquer app Android. &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> faz merge de 11 PRs de NWC adicionando suporte a carteira dupla e ciclo de vida automático do serviço. &lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> lança &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">carteira Lightning embutida&lt;/a> via integração NWC. &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> se prepara para lançamento na Android App Store enquanto o HAVEN alcança &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a> com suporte a múltiplos npubs e backup em nuvem. Os deep dives desta semana cobrem o sistema de Trusted Assertions do NIP-85 para delegar cálculos de Web of Trust a provedores de serviço, e o protocolo de Eventos de Calendário do NIP-52 após sua atualização de indexação com granularidade de dia.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="camada-de-cache-local-do-blossom-emerge">Camada de Cache Local do Blossom Emerge&lt;/h3>
&lt;p>Múltiplos projetos independentes estão convergindo para o mesmo problema: acesso offline a mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> em dispositivos móveis.&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a>, um novo app Android de greenart7c3 (o desenvolvedor por trás do &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> e do &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>), implementa cache no lado do cliente para mídia Blossom. Usuários podem acessar imagens e arquivos visualizados anteriormente sem conexão de rede.&lt;/p>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a> lançou &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a> com rotulagem de imagens, operações em massa de espelhamento/marcação/exclusão, filtragem por rótulo e tipo de arquivo, além de suporte inicial a cache local Blossom. Aerith é uma interface de gerenciamento para usuários que armazenam mídia em múltiplos servidores Blossom e precisam organizar e espelhar seus blobs.&lt;/p>
&lt;p>Um novo &lt;a href="https://github.com/hzrd149/blossom/blob/master/implementations/local-blossom-cache.md">guia de implementação de cache local&lt;/a> na especificação do Blossom documenta armazenamento de blobs no lado do cliente, enquanto &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> (do mesmo desenvolvedor do Aerith) adiciona integração de upload Blossom ao seu fluxo de compartilhamento para Nostr no Android. Quatro projetos independentes convergiram para o mesmo problema esta semana: um app dedicado de cache, um gerenciador de mídia, uma especificação de referência e uma ferramenta de compartilhamento com integração Blossom, todos implementando armazenamento local persistente além do simples upload e recuperação.&lt;/p>
&lt;h3 id="sandbox-nwc-para-desenvolvedores-da-alby">Sandbox NWC para Desenvolvedores da Alby&lt;/h3>
&lt;p>&lt;a href="https://sandbox.albylabs.com">Alby&lt;/a> lançou um ambiente sandbox para desenvolvedores que trabalham com &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">Nostr Wallet Connect (NIP-47)&lt;/a>. O sandbox oferece um serviço NWC hospedado onde desenvolvedores podem criar conexões de teste e enviar pagamentos simulados sem conectar a uma carteira Lightning real, enquanto observam o ciclo completo de requisição/resposta de eventos NWC em tempo real. Desenvolvedores geram uma string de conexão &lt;code>nostr+walletconnect://&lt;/code> a partir do sandbox e a passam para o cliente. O sandbox então exibe os eventos kind 23194 de requisição e kind 23195 de resposta conforme fluem entre o cliente e o serviço de carteira.&lt;/p>
&lt;p>Isso reduz a barreira para novas integrações NWC. Anteriormente, os testes exigiam uma carteira Lightning pessoal ou um serviço NWC auto-hospedado. O sandbox abstrai isso, fornecendo aos desenvolvedores um ciclo de feedback imediato para implementar os 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> e &lt;code>list_transactions&lt;/code> contra um endpoint NWC ativo.&lt;/p>
&lt;h3 id="nips-de-agentes-de-ia-chegam">NIPs de Agentes de IA Chegam&lt;/h3>
&lt;p>Propostas para comunicação de agentes de IA no Nostr apareceram com poucos dias de diferença, abordando o problema sob â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 um protocolo completo para interação de agentes de IA: kinds de evento para prompts, respostas, deltas de streaming, atualizações de status, telemetria de ferramentas, erros, cancelamentos e descoberta de capacidades. Um evento de descoberta &lt;code>ai.info&lt;/code> (kind 31340, substituível) permite que agentes anunciem seus modelos suportados, ferramentas com schemas, suporte a streaming e limites de taxa. A proposta de joelklabo inclui correlação de execução via ID de prompt, gerenciamento de sessão, reconciliação de stream com ordenação por sequência e orientações do &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> para privacidade de metadados.&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE: Agents&lt;/a> de pablof7z adota uma abordagem diferente, definindo kinds para instanciação de agentes: definições e lições. Esses são os tipos de evento que pablof7z usa no &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>, o sistema de aprendizado autônomo construído sobre Nostr. Uma proposta complementar, &lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD: MCP Server and Skill Announcements&lt;/a>, também de pablof7z, define eventos para anunciar servidores do &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> e habilidades no Nostr. Comentários &lt;a href="https://nostrcompass.org/pt/topics/nip-22/">NIP-22&lt;/a> são suportados, de modo que a comunidade pode discutir e avaliar servidores MCP diretamente no Nostr.&lt;/p>
&lt;p>NIP-XX cobre a comunicação completa entre agentes, enquanto NIP-AE e NIP-AD endereçam identidade e descoberta de ferramentas. Essas propostas podem convergir em um padrão unificado ou coexistir como camadas complementares.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&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>, o relay pessoal tudo-em-um que reúne quatro funções de relay com um servidor de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>, alcançou &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>. Este release candidate adiciona suporte a múltiplos npubs, permitindo que uma única instância do HAVEN sirva várias identidades Nostr. RCs anteriores adicionaram as flags &lt;code>--from-cloud&lt;/code> e &lt;code>--to-cloud&lt;/code> para backup em nuvem (RC2) e corrigiram um bug de dupla contagem no Web of Trust (RC1).&lt;/p>
&lt;h3 id="mostro-mobile-v120-carteira-lightning-embutida">Mostro Mobile v1.2.0: Carteira Lightning Embutida&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>, o cliente mobile para a exchange P2P de Bitcoin &lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> (&lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#mostro-lan%C3%A7a-primeiro-beta-p%C3%BAblico">v1.1.0 coberta na semana passada&lt;/a>), lançou &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">v1.2.0&lt;/a> com uma carteira Lightning embutida por meio de integração completa com &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NWC (NIP-47)&lt;/a>. Compradores e vendedores não precisam mais alternar entre apps para gerenciar invoices. O app detecta hold invoices para vendedores e as paga automaticamente pela carteira conectada, enquanto compradores recebem geração automática de invoice. O lançamento segue o &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.1%2B1">v1.1.1&lt;/a> do início da semana, que adicionou suporte a múltiplos nós Mostro com um registro curado de instâncias confiáveis, busca de metadados kind 0 para exibição de nós, gerenciamento de nós personalizados por pubkey e fallback automático quando o nó selecionado fica offline.&lt;/p>
&lt;p>No lado servidor, o &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.2">Mostro v0.16.2&lt;/a> chegou com correções para pagamentos duplicados de taxa de desenvolvimento, limitação de taxa no endpoint RPC de validação de senha e limpeza adequada de disputas em cancelamento cooperativo.&lt;/p>
&lt;p>Um novo projeto complementar, &lt;a href="https://github.com/MostroP2P/mostro-skill">mostro-skill&lt;/a>, permite que agentes negociem no Mostro via 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>, o gerenciador de imagens &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>, lançou &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a> com rótulos de imagem para organizar mídia, operações em massa de espelhamento/marcação/exclusão entre servidores, filtragem por rótulo e tipo de arquivo, além de suporte inicial a cache local. Veja a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#camada-de-cache-local-do-blossom-emerge">seção de Notícias&lt;/a> para contexto sobre a tendência mais ampla de cache local.&lt;/p>
&lt;h3 id="mapnolia-tiles-de-mapa-descentralizados-via-nostr">Mapnolia: Tiles de Mapa Descentralizados via Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> é um novo servidor de dados geoespaciais que divide arquivos de mapa &lt;a href="https://github.com/protomaps/PMTiles">PMTiles&lt;/a> em regiões geográficas e as anuncia via Nostr para descoberta descentralizada. Ele publica eventos substituíveis parametrizados kind 34444 em relays Nostr contendo um índice completo de fragmentos de tiles de mapa com metadados de camadas, regiões de geohash, referências de arquivos e detalhes de servidor &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>.&lt;/p>
&lt;p>Clientes descobrem e recuperam dados de mapa pela rede Nostr em vez de servidores centralizados de tiles, com eventos de anúncio carregando metadados suficientes para solicitar apenas as regiões geográficas necessárias dos servidores Blossom listados. Mapnolia é o primeiro projeto a trazer distribuição de dados geoespaciais para o Nostr, abrindo possibilidades para aplicações de mapeamento com suporte offline.&lt;/p>
&lt;h3 id="pika-mensagens-criptografadas-baseadas-em-marmot">Pika: Mensagens Criptografadas Baseadas em Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> é um novo app de mensagens criptografadas ponta a ponta para iOS e Android usando o protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a>, que camada o &lt;a href="https://nostrcompass.org/pt/topics/mls/">Messaging Layer Security (MLS)&lt;/a> sobre relays Nostr. A arquitetura separa as responsabilidades em um núcleo Rust (&lt;code>pika_core&lt;/code>) que gerencia o estado MLS e a criptografia/descriptografia de mensagens sobre relays Nostr, com camadas nativas finas de UI em SwiftUI (iOS) e Kotlin (Android). O estado flui unidirecionalmente: a UI despacha ações para o ator Rust, que muta o estado e emite snapshots com números de revisão de volta para a UI via bindings UniFFI e JNI.&lt;/p>
&lt;p>Pika se junta a um campo crescente de mensageiros MLS-sobre-Nostr ao lado de &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>, &lt;a href="https://github.com/VectorPrivacy">Vector&lt;/a> e &lt;a href="https://0xchat.com">0xchat&lt;/a>. Todos usam relays Nostr como camada de transporte para texto cifrado criptografado por MLS, mantendo os operadores de relay incapazes de ler o conteúdo das mensagens. Pika usa o Marmot Development Kit (MDK) para sua implementação MLS e nostr-sdk para conectividade com relays.&lt;/p>
&lt;h3 id="keep-assinatura-de-limiar-frostpttopicsfrost-para-android">Keep: Assinatura de Limiar &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> para Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> é um novo aplicativo Android para assinatura de limiar &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> onde nenhum dispositivo único detém a chave privada completa. Ele implementa &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (Android Signer) e &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (assinatura remota), de modo que clientes Nostr compatíveis podem solicitar assinaturas enquanto o material de chave permanece distribuído entre dispositivos. As configurações padrão são 2-de-3 e 3-de-5, embora qualquer limiar t-de-n seja suportado.&lt;/p>
&lt;p>A cerimônia de geração distribuída de chaves (DKG) do Keep é executada sobre relays Nostr usando kinds de evento personalizados: kind 21101 para anúncios de grupo, kind 21102 para polinômios de comprometimento da rodada 1 (difundidos publicamente) e kind 21103 para compartilhamentos secretos da rodada 2 (criptografados ponto a ponto com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> entre participantes). O escalar da chave privada do grupo nunca é calculado ou montado em nenhum lugar durante o DKG. Cada dispositivo mantém apenas sua avaliação de polinômio, e quaisquer t compartilhamentos podem produzir uma assinatura Schnorr válida por meio de um protocolo de comprometer-depois-assinar em duas rodadas. A assinatura resultante de 64 bytes é indistinguível de uma assinatura Schnorr de signatário único. Por baixo, Keep usa o crate &lt;code>frost-secp256k1-tr&lt;/code> da Zcash Foundation com ajuste Taproot, de modo que a chave pública do grupo funciona diretamente como um npub Nostr.&lt;/p>
&lt;p>Keep se junta à família &lt;a href="https://frostr.org">Frostr&lt;/a> de projetos ao lado de &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 para 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 para iOS&lt;/a>, expandindo as opções de gerenciamento de chaves por limiar no Nostr.&lt;/p>
&lt;h3 id="prism-compartilhe-qualquer-coisa-no-nostr-a-partir-do-android">Prism: Compartilhe Qualquer Coisa no Nostr a Partir do Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> é um novo app Android (Kotlin/Jetpack Compose, API 26+) que se registra como destino de compartilhamento do sistema, permitindo que usuários publiquem textos, URLs, imagens e vídeos no Nostr a partir de qualquer app do celular. URLs compartilhadas passam por um removedor de parâmetros de rastreamento antes de serem compostas em notas. Prism busca metadados OpenGraph para gerar pré-visualizações ricas de links e renderiza referências Nostr nativas (&lt;code>note1&lt;/code>, &lt;code>nevent1&lt;/code>) inline.&lt;/p>
&lt;p>O mecanismo de agendamento usa uma abordagem híbrida &lt;code>AlarmManager&lt;/code>/&lt;code>WorkManager&lt;/code> para contornar as otimizações de bateria do Android: AlarmManager gerencia o tempo preciso de wake-up enquanto tarefas expedidas do WorkManager garantem a entrega, com retry exponencial para cenários offline. Uploads de mídia passam por servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> configuráveis com geração de miniaturas para imagens e frames de vídeo. Toda assinatura de eventos é delegada a assinadores externos &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> como o &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>, com suporte a múltiplas contas para alternar entre identidades. Prism também suporta posts de &lt;a href="https://nostrcompass.org/pt/topics/nip-84/">NIP-84 (Highlights)&lt;/a>. Do mesmo desenvolvedor do &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#aerith-v02">Aerith&lt;/a>.&lt;/p>
&lt;h3 id="hashtree-armazenamento-endereçado-por-conteúdo-com-integração-nostr">Hashtree: Armazenamento Endereçado por Conteúdo com Integração Nostr&lt;/h3>
&lt;p>&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> é um sistema de armazenamento de blobs endereçado por conteúdo baseado em sistema de arquivos que publica raízes Merkle no Nostr para criar endereços mutáveis npub/caminho. O sistema usa &amp;ldquo;armazenamento burro&amp;rdquo; que funciona com qualquer store chave-valor, dividindo o conteúdo em blocos de 2MB otimizados para uploads &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>. Ao contrário do BitTorrent, não é necessário computação ativa de prova Merkle - basta armazenar e recuperar blobs por hash.&lt;/p>
&lt;p>A integração Nostr possibilita URLs remotas git como &lt;code>htree://npub.../nome-do-repo&lt;/code> para clonar repositórios, com comandos como &lt;code>htree publish mydata &amp;lt;hash&amp;gt;&lt;/code> para publicar hashes de conteúdo em endereços &lt;code>npub.../mydata&lt;/code>. A CLI abrangente suporta modos de armazenamento criptografado (padrão) e público, fixação de conteúdo, envio a servidores Blossom e gerenciamento de identidades Nostr. Cada item armazenado é ou bytes brutos ou um nó de árvore, fornecendo uma base para distribuição descentralizada de conteúdo pela rede de relays do Nostr.&lt;/p>
&lt;h3 id="espy-captura-de-paleta-de-cores-no-shakespeare">Espy: Captura de Paleta de Cores no Shakespeare&lt;/h3>
&lt;p>&lt;a href="https://espy.you">Espy&lt;/a>, construído na plataforma &lt;a href="https://soapbox.pub/tools/shakespeare/">Shakespeare&lt;/a>, permite que usuários capturem paletas de cores de fotos e as compartilhem como eventos Nostr. Shakespeare é um construtor de apps com IA que autentica usuários via extensões de navegador NIP-07 e fornece conectividade integrada com relays Nostr, de modo que desenvolvedores publicam apps sem implementar seu próprio gerenciamento de chaves ou pool de relays. Espy extrai cores dominantes da câmera em cartões de paleta compartilháveis descobríveis por feeds Nostr padrão.&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>, o cliente Nostr semelhante ao Discord de hodlbod que organiza relays como grupos, lançou &lt;a href="https://gitea.coracle.social/coracle/flotilla/releases/tag/1.6.4">1.6.4&lt;/a>. A família de projetos Coracle migrou do GitHub para uma &lt;a href="https://gitea.coracle.social/coracle">instância Gitea auto-hospedada&lt;/a>. Este lançamento adiciona notificações push via NIP-9a e um fluxo de recebimento de carteira, além de listagens classificadas e suporte a URL de espaço. Melhorias de interface incluem modais e tratamento de notificações simplificados. Silenciamento de salas e insets de área segura em mobile complementam as mudanças, junto com correções para uploads de imagem no Safari e detalhes de eventos de calendário.&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>, o app mobile de transmissão ao vivo com integração Nostr, lançou &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.12.0">v0.12.0&lt;/a>. Este lançamento adiciona Clips de vídeo com respostas dentro do player e integração de emoji personalizado. A proteção de thread bloqueia spam de menções indiretas, e um novo recurso de compartilhamento por QR permite que usuários troquem perfis offline. Um novo modo de reprodução horizontal oferece uma experiência de visualização estilo Twitch, e a tela de navegação agora apresenta clips de criadores ao lado de transmissões ao 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>, uma biblioteca de tradução de redes sociais que converte dados entre Nostr, Bluesky, ActivityPub e outras plataformas em um formato comum, lançou &lt;a href="https://github.com/snarfed/granary/releases/tag/v10.0">v10.0&lt;/a> com mudanças que quebram compatibilidade. O lançamento muda os IDs ActivityStreams 1 padrão do Nostr de bech32 para hex e adiciona suporte expandido ao Nostr, incluindo parsing de menções &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> e tags de artigo. Uma nova opção de saída múltipla nos conversores permite que desenvolvedores traduzam entre protocolos em 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>, um servidor de &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> que permite a agentes de IA interagirem com a rede Nostr, lançou &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server/releases/tag/v3.0.0">v3.0.0&lt;/a>. Este lançamento principal adiciona ações sociais (follows, reações, reposts, respostas) e gerenciamento de lista de relays com suporte a &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> mais autenticação opcional &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a>. Mensagens diretas via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> também são novidades. O lançamento se complementa com as &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#nips-de-agentes-de-ia-chegam">propostas de NIP para agentes de IA&lt;/a> desta semana como ferramental prático para agentes que operam no 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>, o assinador Nostr multiplataforma, lançou &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.8">v0.3.8&lt;/a> com suporte a UI multilíngue e um gerenciador de atualização incremental para seu navegador de apps Nostr embutido. O novo mecanismo de atualização faz diff incremental contra o estado local, mantendo o diretório interno de apps web Nostr atualizado com menor uso de largura de banda. O lançamento também introduz cache de 5 minutos para material de chave, reduzindo as idas ao banco de dados ao assinar múltiplos eventos em sequência.&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), uma biblioteca TypeScript para o protocolo Nostr, lançou &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.1">v0.3.1&lt;/a>. O lançamento adiciona verificações de pacote garantindo que todos os pontos de entrada estejam incluídos nos tarballs npm, com aplicação por CI no Node e Bun. O &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.0">v0.3.0&lt;/a> foi lançado na mesma 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>, o relay Nostr Android de greenart7c3, lançou &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre1">v2.0.0-pre1&lt;/a> com melhorias de desempenho por meio de índices de banco de dados otimizados e melhor tratamento de coroutines Kotlin. O lançamento também aprimora o suporte para hospedagem de web apps, com cada app agora rodando em sua própria porta.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="primal-android-expansão-da-infraestrutura-nwc">Primal Android: Expansão da Infraestrutura NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fez merge de 11 PRs relacionados a NWC esta semana, continuando a construção &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/#primal-android-entrega-criptografia-nwc">iniciada há duas semanas&lt;/a>. Este lote adiciona suporte a NWC para carteira dupla, início/parada automática do serviço vinculada a notificações do backend, roteamento de conexão por tipo de carteira e limpeza adequada de dados ao excluir carteira. O serviço NWC agora gerencia seu próprio ciclo de vida com base no estado de conexão da carteira, reduzindo a intervenção manual do usuário.&lt;/p>
&lt;h3 id="notedeck-preparação-para-android-app-store">Notedeck: Preparação para Android App Store&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente Nostr multiplataforma da equipe &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>, fez merge da &lt;a href="https://github.com/damus-io/notedeck/pull/1287">preparação para lançamento na Android App Store&lt;/a> esta semana. O PR adiciona um plano de conformidade UGC (Conteúdo Gerado pelo Usuário) exigido pelo Google Play, incluindo uma tela de aceitação dos Termos de Serviço, bloqueio de usuários via menus de contexto e configurações, funcionalidade &lt;a href="https://nostrcompass.org/pt/topics/nip-56/">NIP-56 (Reporting)&lt;/a> que publica eventos de denúncia em relays, e uma seção de configurações de Conteúdo e Segurança. Infraestrutura de build foi adicionada para geração de APKs e AABs (Android App Bundles) de lançamento assinados via novos targets Makefile. Um documento EULA estabelece requisito de idade de 17 anos e isenções de responsabilidade específicas do Nostr sobre conteúdo descentralizado. Os próprios recursos de conformidade serão entregues em PRs subsequentes; este merge estabelece as bases de documentação e assinatura.&lt;/p>
&lt;p>No lado iOS do Damus, foi lançada uma correção para uma &lt;a href="https://github.com/damus-io/damus/pull/3593">regressão de spinner de carregamento infinito&lt;/a> onde o spinner persistia indefinidamente após o conteúdo ter sido carregado.&lt;/p>
&lt;h3 id="nostria-relays-de-descoberta-e-correções-de-dm">Nostria: Relays de Descoberta e Correções de DM&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>, o cliente Nostr multiplataforma focado em escala global, fez merge de 9 PRs esta semana. O mais notável adiciona &lt;a href="https://github.com/nostria-app/nostria/pull/460">inicialização automática de Relays de Descoberta&lt;/a> para busca de perfis, dando a novos usuários conectividade funcional com relays sem configuração manual. Outras correções tratam de &lt;a href="https://github.com/nostria-app/nostria/pull/466">quebra de linha na área de texto de DM&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/479">preenchimento de viewport em vídeo fullscreen&lt;/a>, &lt;a href="https://github.com/nostria-app/nostria/pull/481">extração de metadados de artigos em pré-visualizações de repost&lt;/a> e &lt;a href="https://github.com/nostria-app/nostria/pull/458">resolução de URI nostr: em notificações&lt;/a>.&lt;/p>
&lt;h3 id="camelus-migração-para-riverpod-v3">Camelus: Migração para Riverpod v3&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>, o cliente Nostr baseado em Flutter, fez merge de 5 PRs esta semana centrados em uma &lt;a href="https://github.com/camelus-hq/camelus/pull/158">migração de API para Riverpod v3&lt;/a> e &lt;a href="https://github.com/camelus-hq/camelus/pull/159">refatoração de feed genérico&lt;/a>. Um &lt;a href="https://github.com/camelus-hq/camelus/pull/161">cache de notas embutidas&lt;/a> evita buscas redundantes em relays para notas citadas.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&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: Descoberta de Provedores de Serviço&lt;/a>&lt;/strong>: vitorpamplona adicionou orientações sobre descoberta pelo cliente de provedores de serviço de &lt;a href="https://nostrcompass.org/pt/topics/nip-85/">NIP-85 Trusted Assertions&lt;/a>, incluindo dicas de relay e chaves de serviço específicas por algoritmo. Veja o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#deep-dive-de-nip-nip-85-trusted-assertions">deep dive abaixo&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: Limpeza de Informações de Relay&lt;/a>&lt;/strong>: fiatjaf removeu &lt;code>privacy_policy&lt;/code>, o array &lt;code>retention&lt;/code>, &lt;code>relay_countries&lt;/code> e o bloco de preferências de comunidade do &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>. Operadores de relay raramente populavam esses campos e os clientes não agiam sobre eles.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52: Tag de Timestamp com Granularidade de Dia&lt;/a>&lt;/strong>: staab adicionou uma tag &lt;code>D&lt;/code> obrigatória ao &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> para eventos de calendário baseados em tempo (kind 31923) representando o timestamp Unix com granularidade de dia, calculado como &lt;code>floor(unix_seconds / 86400)&lt;/code>. Múltiplas tags &lt;code>D&lt;/code> cobrem eventos de vários dias, habilitando indexação temporal eficiente sem precisar analisar timestamps completos.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47: Simplificação&lt;/a>&lt;/strong>: O PR de simplificação &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/">discutido no Compass #9&lt;/a> foi mergeado esta semana, removendo &lt;code>multi_pay_invoice&lt;/code> e &lt;code>multi_pay_keysend&lt;/code> do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Veja o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/#deep-dive-de-nip-nip-47-nostr-wallet-connect">Compass #8&lt;/a> para o deep dive completo do protocolo NWC.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&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>: Coberto no &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/">Compass #8&lt;/a>, esta proposta de especificação de podcast gerou discussão acalorada esta semana. staab observou que já existem pelo menos três padrões concorrentes de podcast em uso, e derekross apontou para uma implementação existente de seis meses com apps e podcasts ativos. O caminho a seguir exige convergência entre implementações antes que um número de NIP possa ser atribuído.&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 propõe um protocolo completo de comunicação de agentes de IA com kinds de evento para prompts, respostas, streaming, telemetria de ferramentas, erros e descoberta de capacidades. Veja a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-18-newsletter/#nips-de-agentes-de-ia-chegam">seção de Notícias&lt;/a> para cobertura de todas as propostas de IA desta 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>: O sistema de notas privadas de jb55 define eventos kind 1080 para armazenar notas pessoais criptografadas em relays sem revelar quem as escreveu. O esquema deriva um par de chaves pseudônimo determinístico a partir do nsec do usuário via HKDF: &lt;code>pns_key = hkdf_extract(ikm=device_key, salt=&amp;quot;nip-pns&amp;quot;)&lt;/code>, depois gera um par de chaves secp256k1 a partir dessa chave derivada. Uma segunda derivação produz uma chave de criptografia simétrica: &lt;code>pns_nip44_key = hkdf_extract(ikm=pns_key, salt=&amp;quot;nip44-v2&amp;quot;)&lt;/code>. As notas internas são criptografadas com &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> v2 usando essa chave e publicadas sob a pubkey pseudônima, de modo que relays veem eventos kind 1080 de uma identidade desvinculada da chave principal do usuário. Ao contrário dos gift wraps do &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>, o PNS não é passível de spam (a chave pseudônima é determinística, não aleatória) e não carrega metadados públicos (nenhuma tag &lt;code>p&lt;/code> é necessária, pois não há destinatário). Esta semana, jb55 publicou descobertas da implementação do PNS no backend Rust do Notedeck (módulo &lt;code>enostr::pns&lt;/code>). Ele identificou que a chamada &lt;code>hkdf_extract&lt;/code> da especificação é ambígua porque o HKDF RFC 5869 tem duas fases (Extract e Expand) que produzem saída diferente, e a maioria das bibliotecas espera ambas. Ele esclareceu que &lt;code>pns_nip44_key&lt;/code> contorna o acordo de chaves ECDH normal do NIP-44 e é usada diretamente como a chave de conversa, um detalhe que implementadores precisam saber, pois a maioria das bibliotecas NIP-44 usa ECDH por padrão. Ele também sinalizou uma variável indefinida na implementação de referência TypeScript. O PR, originalmente de abril de 2025, está agora sendo ativamente implementado.&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 quatro kinds de evento para identidade de agente no Nostr, extraídos de seu trabalho no &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>. O template base é kind 4199 (Agent Definition), carregando título, descrição de papel, instruções do sistema, declarações de ferramentas e versão. Modificadores comportamentais ficam no kind 4201 (Agent Nudge), que usa as tags &lt;code>only-tool&lt;/code>, &lt;code>allow-tool&lt;/code> e &lt;code>deny-tool&lt;/code> para controle de capacidades em tempo de execução. Agentes publicam o que aprendem como eventos kind 4129 (Agent Lesson), categorizados e vinculados de volta à definição pai via tags &lt;code>e&lt;/code>, refinável por meio de threads de comentário &lt;a href="https://nostrcompass.org/pt/topics/nip-22/">NIP-22&lt;/a>. A verificação de propriedade usa kind 14199, um evento substituível onde operadores humanos listam seus pubkeys de agente, estabelecendo uma cadeia bidirecional quando combinado com a tag &lt;code>p&lt;/code> do perfil kind 0 do 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 do &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> e habilidades individuais no Nostr. Anúncios de servidor MCP carregam a URL de endpoint do servidor e a versão de protocolo suportada junto com uma lista de ferramentas disponíveis com seus schemas de entrada. Comentários &lt;a href="https://nostrcompass.org/pt/topics/nip-22/">NIP-22&lt;/a> são suportados em anúncios de servidor, de modo que a comunidade pode discutir e avaliar servidores MCP diretamente no Nostr.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2224">NIP-73: Tag de Kind OSM&lt;/a>&lt;/strong>: DestBro propõe adicionar identificadores OpenStreetMap ao &lt;a href="https://nostrcompass.org/pt/topics/nip-73/">NIP-73 (External Content IDs)&lt;/a>, que padroniza como eventos Nostr referenciam conteúdo externo como livros (ISBN), filmes (ISAN), feeds de podcast (GUID), geohashes e URLs via tags &lt;code>i&lt;/code> e &lt;code>k&lt;/code>. O kind OSM proposto permitiria que eventos referenciem recursos de mapa específicos (edifícios, estradas, parques) por seu ID de nó ou via OpenStreetMap, conectando conteúdo Nostr ao banco de dados geográfico aberto.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2219">NIP-XX: Variantes de Imagem Responsiva&lt;/a>&lt;/strong>: woikos propõe estender eventos de metadados de arquivo &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> com tags para variantes de imagem responsiva em diferentes resoluções. Clientes poderiam selecionar a variante apropriada com base no tamanho da tela e nas condições de rede, reduzindo largura de banda para usuários de dispositivos móveis visualizando imagens de alta resolução hospedadas em servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="deep-dive-de-nip-nip-85-trusted-assertions">Deep Dive de NIP: NIP-85 (Trusted Assertions)&lt;/h2>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> define um sistema para delegar cálculos custosos a provedores de serviço confiáveis que publicam resultados assinados como eventos Nostr. Pontuações de Web of Trust e métricas de engajamento exigem rastrear muitos relays e processar grandes volumes de eventos, trabalho que é impraticável em dispositivos móveis. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2223">merge&lt;/a> desta semana adicionou orientações sobre o processo de descoberta de provedores pelo cliente.&lt;/p>
&lt;p>&lt;strong>Delegação:&lt;/strong>&lt;/p>
&lt;p>Calcular a pontuação de Web of Trust de um usuário exige rastrear grafos de follows com múltiplos saltos em muitos relays, e calcular contagens precisas de seguidores significa desduplicar em toda a rede de relays. Dispositivos móveis e clientes de navegador não conseguem executar essas operações, mas os resultados são essenciais para filtragem de spam e ranqueamento de conteúdo. O NIP-85 preenche essa lacuna permitindo que usuários designem provedores confiáveis para executar os cálculos e publicar resultados como eventos Nostr padrão.&lt;/p>
&lt;p>&lt;strong>Design do Protocolo:&lt;/strong>&lt;/p>
&lt;p>O NIP-85 usa quatro kinds de evento para asserções sobre diferentes tipos de sujeito. Asserções de usuário (kind 30382) carregam contagem de seguidores, contagens de posts/respostas/reações, volumes de zap, rank normalizado (0-100), tópicos comuns e horas ativas:&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>Asserções de evento (kind 30383) avaliam notas individuais com contagem de comentários, citações, reposts, reações e dados 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 endereçáveis (artigos de forma longa, páginas wiki), o kind 30384 aplica as mesmas métricas de engajamento em todas as versões coletivamente. O kind 30385 avalia identificadores externos (livros, filmes, sites, locais, hashtags) referenciados via &lt;a href="https://nostrcompass.org/pt/topics/nip-73/">NIP-73 (External Content IDs)&lt;/a>, que padroniza como eventos Nostr referenciam conteúdo externo via tags &lt;code>i&lt;/code> e &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 asserção é um evento endereçável substituível onde a tag &lt;code>d&lt;/code> contém o sujeito: um pubkey, ID de evento, endereço de evento ou identificador NIP-73. Provedores de serviço assinam esses eventos com suas próprias chaves, e clientes os avaliam com base nas relações de confiança.&lt;/p>
&lt;p>&lt;strong>Descoberta de Provedores:&lt;/strong>&lt;/p>
&lt;p>Usuários declaram quais provedores de asserção confiam publicando eventos kind 10040. Cada entrada especifica o tipo de asserção com o pubkey do provedor e dica de relay, mais variantes de algoritmo opcionais:&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>Usuários podem criptografar a lista de tags em &lt;code>.content&lt;/code> usando &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> para manter suas preferências de provedor privadas. Clientes constroem uma lista de provedores verificando quais provedores as contas que seguem confiam, criando uma camada de reputação descentralizada para os próprios provedores de asserção.&lt;/p>
&lt;p>&lt;strong>Modelo de Segurança:&lt;/strong>&lt;/p>
&lt;p>Provedores devem usar chaves de serviço diferentes para algoritmos distintos, e uma chave única por usuário quando os algoritmos são personalizados, evitando correlação cruzada de consultas entre usuários. Cada chave de serviço recebe um evento de metadados kind 0 descrevendo o comportamento do algoritmo, dando aos usuários transparência sobre o que estão confiando. Eventos de asserção só devem ser atualizados quando os dados subjacentes realmente mudam, evitando tráfego desnecessário de relay e permitindo que clientes armazenem resultados em cache com segurança.&lt;/p>
&lt;p>&lt;strong>Adoção Atual:&lt;/strong>&lt;/p>
&lt;p>O NIP-85 formaliza um padrão que já estava surgindo de forma informal. O servidor de cache do Primal computa métricas de engajamento e pontuações de Web of Trust. &lt;a href="https://gitlab.com/soapbox-pub/antiprimal">Antiprimal&lt;/a>, coberto no &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#antiprimal-gateway-compat%C3%ADvel-com-padr%C3%B5es-ao-cache-do-primal">Compass #9&lt;/a>, faz bridge desses cálculos para clientes Nostr padrão usando kinds de evento NIP-85. &lt;a href="https://nostr.band">Nostr.band&lt;/a> opera o relay &lt;code>wss://nip85.nostr.band&lt;/code> referenciado nos próprios exemplos da spec, servindo eventos de asserção para seus dados de índice de busca. No lado do cliente, &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> (de autoria de vitorpamplona, que também escreveu este NIP) tem suporte experimental a Trusted Assertions em sua biblioteca &lt;code>quartz&lt;/code>, analisando eventos de asserção e declarações de provedores de serviço. &lt;a href="https://vertexlab.io">Vertex&lt;/a> computa métricas similares de Web of Trust, mas &lt;a href="https://vertexlab.io/blog/dvms_vs_nip_85/">escolheu uma abordagem diferente&lt;/a>, usando uma API direta em vez de eventos NIP-85, citando o problema de descoberta e o overhead computacional de arquiteturas baseadas em asserção. Com o NIP-85, qualquer cliente pode consumir asserções de qualquer provedor por meio de um formato de evento padrão, e provedores competem em precisão enquanto usuários escolhem em quem confiar.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-52-eventos-de-calendário">Deep Dive de NIP: NIP-52 (Eventos de Calendário)&lt;/h2>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/52.md">NIP-52&lt;/a> define eventos de calendário no Nostr, dando aos clientes uma forma padrão de representar e descobrir ocorrências em momentos específicos ou entre momentos. O &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">merge da tag D&lt;/a> desta semana adicionou indexação com granularidade de dia, completando uma peça ausente na infraestrutura de consulta da spec.&lt;/p>
&lt;p>&lt;strong>Dois Tipos de Evento:&lt;/strong>&lt;/p>
&lt;p>O NIP-52 separa eventos de calendário em dois kinds com base na precisão temporal. Eventos baseados em data (kind 31922) representam ocorrências de dia inteiro como feriados ou festivais de vários dias. Eles usam strings de data ISO 8601 em suas tags &lt;code>start&lt;/code> e &lt;code>end&lt;/code> opcionais, sem consideração de fuso horário:&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>Eventos baseados em tempo (kind 31923) representam momentos específicos com timestamps Unix em suas tags &lt;code>start&lt;/code> e &lt;code>end&lt;/code> opcionais, mais identificadores de fuso horário IANA (&lt;code>start_tzid&lt;/code>, &lt;code>end_tzid&lt;/code>) para exibição. Ambos os kinds são eventos substituíveis parametrizados, de modo que organizadores atualizam detalhes publicando um novo evento com a mesma tag &lt;code>d&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Calendários e RSVPs:&lt;/strong>&lt;/p>
&lt;p>Eventos kind 31924 definem calendários como coleções, referenciando eventos via tags &lt;code>a&lt;/code> que apontam para eventos kind 31922 ou 31923 por suas coordenadas de endereço:&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>Usuários podem manter múltiplos calendários (pessoal, trabalho, comunidade) e clientes podem assinar calendários de pubkeys específicos. Eventos de calendário podem incluir uma tag &lt;code>a&lt;/code> referenciando um calendário para solicitar inclusão, habilitando gerenciamento colaborativo onde múltiplos usuários contribuem com eventos para calendários que não possuem.&lt;/p>
&lt;p>RSVPs usam kind 31925, onde usuários publicam seu status de presença junto com um indicador opcional de livre/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>Os valores válidos de &lt;code>status&lt;/code> são &amp;ldquo;accepted&amp;rdquo;, &amp;ldquo;declined&amp;rdquo;, &amp;ldquo;tentative&amp;rdquo;, e a tag opcional &lt;code>fb&lt;/code> marca o usuário como livre ou ocupado naquele período. Eventos de RSVP referenciam a tag &lt;code>a&lt;/code> do evento de calendário e carregam a tag &lt;code>p&lt;/code> do organizador, de modo que o cliente do organizador pode agregar respostas entre relays.&lt;/p>
&lt;p>&lt;strong>A Adição da Tag D:&lt;/strong>&lt;/p>
&lt;p>Antes do merge desta semana, clientes que consultavam eventos em um intervalo de datas precisavam buscar todos os eventos de um pubkey ou calendário e filtrar no lado do cliente. A nova tag &lt;code>D&lt;/code> obrigatória em eventos baseados em tempo (kind 31923) contém um timestamp Unix com granularidade de dia calculado como &lt;code>floor(unix_seconds / 86400)&lt;/code>. Eventos de vários dias carregam múltiplas tags &lt;code>D&lt;/code>, uma por dia. Relays agora podem indexar eventos por dia e responder a consultas filtradas de forma eficiente, transformando o que era um problema de filtragem no lado do cliente em uma busca por índice no lado do 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>O valor &lt;code>D&lt;/code> de &lt;code>20139&lt;/code> é igual a &lt;code>floor(1740067200 / 86400)&lt;/code>, posicionando este evento em 20 de fevereiro de 2025. Clientes que consultam &amp;ldquo;todos os eventos desta semana&amp;rdquo; enviam um filtro com o intervalo &lt;code>D&lt;/code> correspondente, e os relays retornam apenas os eventos correspondentes.&lt;/p>
&lt;p>&lt;strong>Decisões de Design:&lt;/strong>&lt;/p>
&lt;p>O NIP-52 omite intencionalmente eventos recorrentes. A spec deixa de fora as regras de recorrência (RRULE do iCalendar) completamente, delegando essa complexidade aos clientes. Um organizador publica eventos individuais para cada ocorrência, mantendo o modelo de dados no lado do relay simples. Tags de participante carregam papéis opcionais (&amp;ldquo;host&amp;rdquo;, &amp;ldquo;speaker&amp;rdquo;, &amp;ldquo;attendee&amp;rdquo;), e tags de localização podem incluir tags de geohash &lt;code>g&lt;/code> para consultas espaciais junto com endereços legíveis por humanos.&lt;/p>
&lt;p>&lt;strong>Implementações:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/zmeyer44/flockstr">Flockstr&lt;/a> é o principal cliente de calendário construído sobre NIP-52. &lt;a href="https://gitea.coracle.social/coracle/coracle">Coracle&lt;/a> exibe eventos de calendário em seu feed social. A adição da tag &lt;code>D&lt;/code> esta semana habilita indexação temporal no lado do relay que ambos os clientes podem usar para reduzir largura de banda ao consultar eventos em um intervalo de datas específico.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Construindo algo ou tem novidades para compartilhar? Quer que cobramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #9</title><link>https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Mostro lança seu primeiro beta público após três anos de desenvolvimento, trazendo negociação P2P de Bitcoin para mobile via Nostr. OpenSats concede sua décima sexta onda de grants Bitcoin, com Minibits Wallet recebendo renovação de grant. &lt;strong>Zapstore alcança o lançamento estável 1.0&lt;/strong>, marcando a maturação da loja de apps Android descentralizada. Coracle 0.6.29 adiciona tópicos e comentários em highlights. Igloo Desktop v1.0.3 entrega endurecimento de segurança com assinatura de limiar Frostr. Amber v4.1.2-pre1 migra a arquitetura Flow. Angor alcança v0.2.5 com UI de financiamento renovada e configuração de servidor de imagens NIP-96. NostrPress surge como ferramenta que converte perfis Nostr em blogs estáticos. Antiprimal entrega gateway compatível com padrões que faz bridge do servidor de cache proprietário do Primal a NIPs padrão do Nostr. Primal Android faz merge de 18 PRs expandindo infraestrutura NWC com suporte a carteira dupla, logging de auditoria e o método &lt;code>lookup_invoice&lt;/code>. diVine entrega feeds de vídeo API-first. O SDK TypeScript do Marmot separa seu app de chat de referência em repositório independente e começa migração a ts-mls v2. O repositório de NIPs faz merge de contagem aproximada HyperLogLog no NIP-45 e extrai tags de identidade do kind 0. Propostas de vitorpamplona começam a sistematicamente reduzir eventos de metadados kind 0. Novas propostas de protocolo incluem Nostr Relay Connect (traversal de NAT) e Nostr Web Tokens (claims web assinados). Os deep dives cobrem a contagem aproximada HyperLogLog do NIP-45 e o protocolo de armazenamento de arquivos HTTP do NIP-96, agora depreciado em favor do Blossom, enquanto projetos navegam a transição entre os dois padrões de mídia.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Mostro lança seu primeiro beta público após três anos de desenvolvimento, trazendo negociação P2P de Bitcoin para mobile via Nostr. OpenSats concede sua décima sexta onda de grants Bitcoin, com Minibits Wallet recebendo renovação de grant. &lt;strong>Zapstore alcança o lançamento estável 1.0&lt;/strong>, marcando a maturação da loja de apps Android descentralizada. Coracle 0.6.29 adiciona tópicos e comentários em highlights. Igloo Desktop v1.0.3 entrega endurecimento de segurança com assinatura de limiar Frostr. Amber v4.1.2-pre1 migra a arquitetura Flow. Angor alcança v0.2.5 com UI de financiamento renovada e configuração de servidor de imagens NIP-96. NostrPress surge como ferramenta que converte perfis Nostr em blogs estáticos. Antiprimal entrega gateway compatível com padrões que faz bridge do servidor de cache proprietário do Primal a NIPs padrão do Nostr. Primal Android faz merge de 18 PRs expandindo infraestrutura NWC com suporte a carteira dupla, logging de auditoria e o método &lt;code>lookup_invoice&lt;/code>. diVine entrega feeds de vídeo API-first. O SDK TypeScript do Marmot separa seu app de chat de referência em repositório independente e começa migração a ts-mls v2. O repositório de NIPs faz merge de contagem aproximada HyperLogLog no NIP-45 e extrai tags de identidade do kind 0. Propostas de vitorpamplona começam a sistematicamente reduzir eventos de metadados kind 0. Novas propostas de protocolo incluem Nostr Relay Connect (traversal de NAT) e Nostr Web Tokens (claims web assinados). Os deep dives cobrem a contagem aproximada HyperLogLog do NIP-45 e o protocolo de armazenamento de arquivos HTTP do NIP-96, agora depreciado em favor do Blossom, enquanto projetos navegam a transição entre os dois padrões de mídia.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="mostro-lança-primeiro-beta-público">Mostro Lança Primeiro Beta Público&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>, a exchange peer-to-peer de Bitcoin construída sobre Nostr, lançou seu &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">app mobile v1.1.0&lt;/a>, o primeiro beta público do projeto após três anos de desenvolvimento. O app permite que usuários negociem Bitcoin diretamente usando Nostr na coordenação de ordens, com Lightning na liquidação e nenhum intermediário custodial.&lt;/p>
&lt;p>O lançamento introduz notificações push com confiabilidade em background melhorada no Android, sistema opcional de logging que permite capturar e compartilhar dados de diagnóstico quando surgem problemas, atualizações de relay mais suaves usando inicialização aditiva, e refinamentos de UI da Fase 2 com suporte a internacionalização. O app está disponível na &lt;a href="https://zapstore.dev">Zapstore&lt;/a> e como &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">download direto do GitHub&lt;/a>.&lt;/p>
&lt;p>Mostro se junta a Shopstr e Plebeian Market como aplicação de comércio nativa do Nostr, com a distinção de que foca em coordenação de troca fiat-Bitcoin. O &lt;a href="https://github.com/MostroP2P/mostro">daemon Mostro&lt;/a> subjacente lida com correspondência de ordens e resolução de disputas através de relays Nostr.&lt;/p>
&lt;h3 id="décima-sexta-onda-de-grants-bitcoin-da-opensats">Décima Sexta Onda de Grants Bitcoin da OpenSats&lt;/h3>
&lt;p>&lt;a href="https://opensats.org/blog/sixteenth-wave-of-bitcoin-grants">OpenSats&lt;/a> anunciou grants a 17 projetos open-source. O destaque relevante ao Nostr: &lt;a href="https://github.com/minibits-cash/minibits_wallet">Minibits Wallet&lt;/a>, a carteira Android &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> com suporte a eventos de carteira &lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a> e integração de nutzap, recebeu grant de renovação. Minibits usa eventos Nostr no armazenamento de estado de tokens ecash, tornando backups de carteira portáveis entre dispositivos através de sincronização via relay.&lt;/p>
&lt;h3 id="nostrpress-perfil-nostr-em-blog-estático">NostrPress: Perfil Nostr em 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>) é ferramenta nova que converte perfil Nostr em blog completamente estático implantável em qualquer lugar. Usuários publicam artigos no Nostr através de qualquer cliente, e o NostrPress gera site independente a partir desses eventos, completo com hospedagem local de mídia e feeds RSS.&lt;/p>
&lt;p>Construído com templates Nunjucks e JavaScript, o NostrPress produz sites sem lock-in de plataforma. A saída gerada é HTML/CSS puro que pode ser hospedado em qualquer servidor de arquivos estáticos, GitHub Pages, Netlify ou VPS pessoal. A ferramenta se junta a &lt;a href="https://github.com/nostrband/nostrsite">Npub.pro&lt;/a> e &lt;a href="https://github.com/servus-social/servus">Servus&lt;/a> como opções na conversão de conteúdo Nostr em sites tradicionais.&lt;/p>
&lt;h3 id="antiprimal-gateway-compatível-com-padrões-ao-cache-do-primal">Antiprimal: Gateway Compatível com Padrões ao Cache do 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>), novo projeto de Alex Gleason e a equipe Soapbox, é gateway WebSocket que faz bridge do servidor de cache proprietário do Primal a mensagens padrão do protocolo Nostr. Primal oferece recursos como estatísticas de eventos, busca de conteúdo e cálculos de Web of Trust através de &lt;code>wss://cache.primal.net/v1&lt;/code>, mas acessar estes requer formato de mensagem proprietário com campo &lt;code>cache&lt;/code> não-padrão que aplicações Nostr padrão não conseguem usar. Antiprimal traduz requisições NIP padrão ao formato do Primal e converte as respostas de volta.&lt;/p>
&lt;p>O gateway suporta consultas COUNT &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a> (reações, respostas, reposts, contagens de zap, contagens de seguidores), busca &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a>, informações de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> e &lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> Trusted Assertions com dados pré-computados de Web of Trust do Primal. Bot complementar publica eventos NIP-85 kind 30382 (estatísticas de usuário) e kind 30383 (engajamento de eventos) em relays configuráveis. O projeto é construído com TypeScript no Bun e usa a biblioteca Nostrify. Criado em 6 de fevereiro, tem 53 commits nos primeiros três dias de desenvolvimento e está ao vivo em antiprimal.net.&lt;/p>
&lt;h3 id="ikaros-gateway-de-mensagens-de-agentes-de-ia-com-signal-e-nostr">Ikaros: Gateway de Mensagens de Agentes de IA com Signal e Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros">Ikaros&lt;/a>, novo projeto da equipe Soapbox, é gateway de mensagens que permite agentes de IA se comunicarem através de DMs criptografadas tanto do Signal quanto do Nostr. A bridge usa o &lt;a href="https://agentclientprotocol.org">Agent Client Protocol&lt;/a> (ACP) na conexão de qualquer assistente de codificação IA compatível com ACP a redes de mensagens reais. Três pull requests constituem a construção inicial do projeto nesta semana.&lt;/p>
&lt;p>O &lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/1">PR #1&lt;/a> implementa adaptador completo de DM criptografada &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> com suporte a envio/recebimento, buffer de resposta com flush explícito na conclusão, formatos de chave privada &lt;code>nsec&lt;/code> e hex, publicação multi-relay com reconexão automática e assistente de configuração interativo. O adaptador usa nostr-tools v2.23.0 e atualiza o ACP SDK a v0.14.1.&lt;/p>
&lt;p>O &lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/2">PR #2&lt;/a> corrige descarte silencioso de mensagens causado por condição de corrida na atualização de sessão: notificações recebidas antes de registro no mapa eram silenciosamente perdidas, e a correção armazena essas notificações em buffer até que o registro seja concluído. O &lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/3">PR #3&lt;/a> adiciona metadados de nome/UUID de usuário e grupo do Signal nas interações com agentes, de modo que o agente de IA saiba com quem está falando e em qual grupo. O projeto abre novo espaço de design: agentes de IA endereçáveis via DMs Nostr que podem ser alcançados do Signal, ou vice-versa.&lt;/p>
&lt;h3 id="campanha-de-redução-do-kind-0">Campanha de Redução do Kind 0&lt;/h3>
&lt;p>vitorpamplona abriu série de PRs nesta semana propondo extração sistemática de dados de eventos kind 0 (metadados de usuário) em kinds de evento dedicados. A campanha aborda problema crescente: eventos kind 0 acumularam campos ao longo do tempo que a maioria dos aplicativos não usa, inflando o tamanho de cada busca de perfil.&lt;/p>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/2216">PR #2216&lt;/a> (mergeado) move tags de identidade (tags &lt;code>i&lt;/code>) do kind 0 a novo kind 10011, já que a adoção dessas tags foi mínima. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2213">PR #2213&lt;/a> propõe mover verificação &lt;a href="https://nostrcompass.org/pt/topics/nip-05/">NIP-05&lt;/a> ao kind 10008, o que permitiria que usuários tivessem múltiplos identificadores NIP-05 e possibilitaria filtrar eventos por endereço NIP-05. O &lt;a href="https://github.com/nostr-protocol/nips/pull/2217">PR #2217&lt;/a> propõe extrair endereços Lightning (lud06/lud16) em novo kind, impedindo que todos os usuários de kind 0 carreguem campos relacionados a zap que só importam em aplicações com integração Lightning.&lt;/p>
&lt;p>As propostas reacenderam a discussão sobre a questão mais ampla da estrutura do kind 0, incluindo o &lt;a href="https://github.com/nostr-protocol/nips/pull/1770">PR #1770&lt;/a>, a proposta de longa data que substitui JSON stringificado no conteúdo do kind 0 por tags estruturadas.&lt;/p>
&lt;h3 id="suporte-a-nip-70-em-relays-é-crítico-na-segurança-de-mensagens-criptografadas">Suporte a NIP-70 em Relays é Crítico na Segurança de Mensagens Criptografadas&lt;/h3>
&lt;p>A implementação White Noise do protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> &lt;a href="https://blog.jgmontoya.com/2026/02/10/nip70-relay-status.html">identificou lacuna crítica&lt;/a> no suporte de relays ao &lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a> (Eventos Protegidos) e &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> (Autenticação). Testes revelaram que relays públicos importantes incluindo Damus, Primal e nos.lol rejeitam eventos protegidos diretamente com erros &lt;code>blocked: event marked as protected&lt;/code> em vez de iniciar o desafio de autenticação obrigatório.&lt;/p>
&lt;p>Isso quebra recurso de segurança chave: NIP-70 permite exclusão segura de KeyPackages MLS gastos, prevenindo ataques &amp;ldquo;coletar agora, descriptografar depois&amp;rdquo;. Sem suporte de relay, protocolos de mensagens criptografadas não conseguem proteger usuários contra comprometimento futuro de chaves. White Noise desabilitou NIP-70 por padrão em resposta, mantendo flag opcional com relays compatíveis.&lt;/p>
&lt;p>&lt;strong>Chamado à ação de operadores de relay:&lt;/strong> Implementem o fluxo completo de autenticação NIP-42. Ao receber eventos protegidos, desafiem os remetentes a provar propriedade e então aceitem escritas validadas. Rejeitar eventos protegidos sem autenticação quebra garantias de segurança do protocolo das quais aplicações de mensagens criptografadas dependem.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&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>), o cliente web de hodlbod, lançou &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.29">0.6.29&lt;/a>. O lançamento adiciona exibição de tópicos e comentários em highlights kind 9802. Novo item de navegação de listas dá acesso rápido a listas curadas pelo usuário a partir da UI principal. Internamente, Coracle atualizou a nova versão do Welshman, a biblioteca Nostr compartilhada que alimenta o gerenciamento de relay e tratamento de eventos do Coracle. A lista padrão de relays foi atualizada, e o rastreamento de erros Glitchtip foi removido do codebase.&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>, o assinador de limiar baseado em &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> e aplicação de gerenciamento de chaves, lançou &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/releases/tag/v1.0.3">v1.0.3&lt;/a> com extenso endurecimento de segurança. O lançamento introduz validação IPC, isolamento Electron e verificações de relay com proteção contra SSRF (server-side request forgery). Novo fluxo de onboarding e importação de shares simplifica a distribuição de chaves, o planejamento de relay agora inclui normalização e merge de prioridade, e arquitetura de API Electron baseada em preload melhora a barreira de segurança entre o renderer e o processo principal. Sistema de keep-alive do assinador mantém estabilidade de sessão de assinatura de limiar, e melhorias de UX de recuperação reduzem a fricção de restauração de chaves.&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>, o assinador de eventos Android, lançou &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.2-pre1">v4.1.2-pre1&lt;/a> corrigindo a exibição ausente de pontuação de confiança de relay introduzida na v4.1.1, resolvendo problemas de parsing JSON em requisições de encrypt/decrypt não-Nostr, e migrando o modelo de conta de LiveData a Flow com gerenciamento de estado mais previsível. O lançamento muda segredos do bunker a UUIDs completos e atualiza ao Gradle plugin 9.&lt;/p>
&lt;h3 id="mostro-mobile-v110-e-daemon-v0161">Mostro Mobile v1.1.0 e Daemon v0.16.1&lt;/h3>
&lt;p>Veja a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#mostro-lan%c3%a7a-primeiro-beta-p%c3%bablico">seção de Notícias acima&lt;/a> com cobertura completa do lançamento mobile. No lado servidor, o &lt;a href="https://github.com/MostroP2P/mostro">daemon Mostro&lt;/a> lançou &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.1">v0.16.1&lt;/a>, adicionando publicação automática de metadados NIP-01 kind 0 na inicialização (&lt;a href="https://github.com/MostroP2P/mostro/pull/575">PR #575&lt;/a>), de modo que o daemon agora anuncia sua identidade na rede quando fica online. A documentação de cálculo de taxas de desenvolvimento foi igualmente corrigida (&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>), o protocolo descentralizado de financiamento P2P construído sobre Bitcoin e Nostr, lançou &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.5">v0.2.5&lt;/a> com três PRs mergeados. O &lt;a href="https://github.com/block-core/angor/pull/649">PR #649&lt;/a> redesenha a seção de gerenciamento de Fundos (V2), substituindo o layout anterior por nova interface que rastreia UTXOs individuais e posições de investimento. O &lt;a href="https://github.com/block-core/angor/pull/651">PR #651&lt;/a> reformula o InvoiceView com estilos de botão atualizados, diálogos fecháveis, novo comando &amp;ldquo;Copiar Endereço&amp;rdquo;, suporte a cancelamento no monitoramento de endereço e tratamento melhorado de fluxo de investimento. O &lt;a href="https://github.com/block-core/angor/pull/652">PR #652&lt;/a> adiciona servidores de imagem &lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">spec&lt;/a>) configuráveis nas configurações, permitindo que usuários escolham qual endpoint de upload de mídia lida com suas imagens de projeto e documentação. A versão &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.4">v0.2.4&lt;/a> foi lançada na semana anterior.&lt;/p>
&lt;h3 id="ridestr-v022-e-v023">Ridestr v0.2.2 e v0.2.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>, a plataforma descentralizada de compartilhamento de caronas &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/#ridestr-v020-roadflare-release">coberta na semana passada&lt;/a>, continuou iteração rápida com &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.2">v0.2.2&lt;/a> (Bridge Payment Hotfix) e &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.3">v0.2.3&lt;/a> após o v0.2.0 &amp;ldquo;RoadFlare Release&amp;rdquo;. O hotfix v0.2.2 corrige bug onde pagamentos bridge &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> cross-mint estavam auto-cancelando corridas enquanto o pagamento ainda estava processando ou eventualmente teria sucesso, prevenindo cancelamento prematuro de corridas em liquidações mais lentas. Corrige igualmente flickering de UI e hitboxes de toque quebradas no botão &amp;ldquo;minha localização&amp;rdquo;. A versão v0.2.3 entrega correções de bugs adicionais. Ambos os lançamentos incluem APKs separados, Ridestr (app do passageiro) e Drivestr (app do motorista).&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>), a biblioteca helper PHP do protocolo Nostr, lançou &lt;a href="https://github.com/nostrver-se/nostr-php/releases/tag/1.9.4">1.9.4&lt;/a> adicionando propriedade &lt;code>timeout&lt;/code> configurável à classe de requisição (&lt;a href="https://github.com/nostrver-se/nostr-php/pull/106">PR #106&lt;/a>). Isso permite que desenvolvedores definam durações de timeout personalizadas em conexões de relay e requisições de mensagem, prevenindo travamentos indefinidos quando relay não responde ou demora a responder.&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>), a loja de apps Android sem permissão construída sobre Nostr, &lt;strong>alcançou seu marco de lançamento estável 1.0&lt;/strong> nesta semana após meses de release candidates.&lt;/p>
&lt;p>O lançamento 1.0 inclui melhorias críticas de estabilidade: tratamento de estado do botão de instalação que garante que Excluir apareça imediatamente após a instalação ser concluída, mensagens de erro amigáveis com detalhes técnicos expansíveis, e botão &amp;ldquo;Reportar problema&amp;rdquo; que envia DMs criptografadas via Nostr usando chaves efêmeras. Entrega ainda nova tela de atualizações com polling e rastreamento em lote, melhor watchdog de download em transferências travadas, limites dinâmicos de downloads concorrentes baseados em desempenho do dispositivo, sincronização mais frequente de pacotes instalados e lógica de comparação de versão aprimorada. A equipe corrigiu problema crítico do flutter_secure_storage e melhorou o tratamento de casos extremos do gerenciador de pacotes.&lt;/p>
&lt;p>O marco representa a maturação da primeira plataforma dedicada de distribuição de apps do Nostr, permitindo que desenvolvedores publiquem aplicações Android diretamente a usuários sem gatekeeping de loja de apps centralizada.&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>, a ferramenta CLI Go da equipe &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> que substitui as ferramentas de publicação anteriores do Zapstore na assinatura e upload de apps Android a relays Nostr, lançou &lt;a href="https://github.com/zapstore/zsp/releases/tag/v0.3.1">v0.3.1&lt;/a>. ZSP lida com aquisição de APK do GitHub, GitLab, Codeberg, F-Droid ou arquivos locais, depois analisa metadados, assina eventos Nostr (via chave privada, bunker &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> ou extensão de navegador &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07&lt;/a>), e faz upload de artefatos a servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a>. A versão adiciona modo offline completo na vinculação de keystore sem conexão de rede, headers &lt;code>Content-Digest&lt;/code> em uploads Blossom em conformidade com o protocolo, detecção corrigida de APK arm64-v8a de repositórios F-Droid, correções de parâmetros trailing de query do GitLab, e suporte completo a arquivo &lt;code>.env&lt;/code> na configuração.&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>, o cliente iOS Nostr, atualizou a versão 1.17 (&lt;a href="https://github.com/damus-io/damus/pull/3606">PR #3606&lt;/a>). O lançamento corrige problema no RelayPool onde conexões fechavam após liberação de lease efêmero (&lt;a href="https://github.com/damus-io/damus/pull/3605">PR #3605&lt;/a>), o que podia causar queda inesperada de subscrições. Resolve ainda bug onde a timeline de favoritos não exibia eventos ao alternar entre abas (&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>, o canivete suíço Nostr CLI, lançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a> com três correções de estabilidade: prevenindo panic quando tags de desafio AUTH são nil ou curtas demais, verificando erros de dateparser antes de usar o valor analisado, e lidando com URLs de mint Cashu que não possuem separador &lt;code>://&lt;/code>.&lt;/p>
&lt;h3 id="mi-relay-local-no-navegador">Mi: Relay Local no 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>), novo MiniApp do &lt;a href="https://shakespeare.wtf">Shakespeare&lt;/a>, é relay local no navegador que arquiva eventos Nostr do usuário em IndexedDB. Mi busca perfis (kind 0), listas de contatos (kind 3), listas de relay (kind 10002) e eventos de carteira de relays conectados e os armazena localmente, dando aos usuários acesso offline aos seus próprios dados. Construído com React e 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 descentralizada de ativismo e arrecadação de fundos da equipe Soapbox, lançou &lt;a href="https://gitlab.com/soapbox-pub/agora/-/releases/v1.0.2">v1.0.2&lt;/a> com APK Android disponível em instalação direta. Esta é a primeira menção do Agora no Compass, que foi lançado em 17 de janeiro com declaração de missão: &amp;ldquo;Junte-se ao movimento global pela liberdade. Envie apoio a ativistas no campo internacionalmente e participe de ações locais.&amp;rdquo;&lt;/p>
&lt;p>A plataforma é centrada em mapa-múndi onde usuários navegam por país, criam &amp;ldquo;ações&amp;rdquo; geolocalizadas (protestos, campanhas, organização comunitária) e as discutem através de comentários em thread. Todo o conteúdo se propaga através de relays Nostr, de modo que nenhum servidor central pode ser derrubado ao silenciar a coordenação. Agora suporta múltiplos idiomas com paridade de tradução obrigatória via CI, integra servidores de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> em uploads, e inclui busca, navegação por hashtag com alternância global/regional, perfis de usuário e sistemas de reação. O lançamento v1.0.2 é a build Android atual, disponível como download direto 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>, o cliente Nostr 3D experimental construído com o motor de jogo Bevy, lançou &lt;a href="https://codeberg.org/xonos/xonos/releases/tag/v0.1.6">v0.1.6&lt;/a>. xonos renderiza eventos Nostr em ambiente espacial 3D com capacidades de text-to-speech, explorando como dados de protocolos sociais podem funcionar fora de interfaces 2D convencionais.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="primal-android-expande-infraestrutura-nwc">Primal Android Expande Infraestrutura NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> fez merge de 18 PRs nesta semana, continuando a construção NWC &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/#primal-android-entrega-criptografia-nwc">iniciada na semana passada&lt;/a>. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/883">PR #883&lt;/a> adiciona suporte a conexões NWC em ambas as carteiras (Spark e externa), e o &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/879">PR #879&lt;/a> implementa o método NWC &lt;code>lookup_invoice&lt;/code> na verificação de status de pagamento.&lt;/p>
&lt;p>O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/880">PR #880&lt;/a> adiciona logging de auditoria de requisição-resposta NWC na depuração de interações de carteira. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/877">PR #877&lt;/a> traz suporte multi-conta ao &lt;code>PrimalNwcService&lt;/code>, permitindo que usuários com múltiplos perfis mantenham conexões de carteira separadas. O &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/882">PR #882&lt;/a> implementa limpeza periódica de reservas de orçamento expiradas, prevenindo que reservas de pagamento obsoletas bloqueiem operações de carteira.&lt;/p>
&lt;p>Trabalho de UI inclui redesign de tela de upgrade de carteira (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/889">PR #889&lt;/a>), FAQ de upgrade de carteira (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/885">PR #885&lt;/a>), configuração de endereço Lightning durante onboarding (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/888">PR #888&lt;/a>) e correção de transações de zap aparecendo como pagamentos regulares em tipos não-Lightning (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/887">PR #887&lt;/a>).&lt;/p>
&lt;h3 id="divine-entrega-feeds-de-vídeo-api-first">diVine Entrega Feeds de Vídeo API-First&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, o cliente de vídeos curtos, fez merge de 19 PRs nesta semana, movendo a arquitetura API-first. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1468">PR #1468&lt;/a> introduz feeds de vídeo API-first, e o &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1466">PR #1466&lt;/a> adiciona endpoints de API de trending, recentes e home. O &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1433">PR #1433&lt;/a> indexa controladores de vídeo específicos na renderização eficiente de feeds.&lt;/p>
&lt;p>Tratamento de perfil melhorou com o &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1440">PR #1440&lt;/a> implementando padrão cache-plus-fresh na visualização de outros perfis, reduzindo tempos de carregamento enquanto garante atualização dos dados. A equipe entregou correções de notificação (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1437">PR #1437&lt;/a>), refatoração de fluxo de comentários (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1431">PR #1431&lt;/a>) e swipe de abas na tela de Notificações (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1388">PR #1388&lt;/a>).&lt;/p>
&lt;h3 id="white-noise-unificação-de-keyring-e-busca-de-usuário">White Noise: Unificação de Keyring e Busca de Usuário&lt;/h3>
&lt;p>O backend &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise&lt;/a> do protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> fez merge de 4 PRs nesta semana. Dois PRs melhoraram tratamento de keyring: o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/468">PR #468&lt;/a> torna o identificador de serviço de keyring configurável via &lt;code>WhitenoiseConfig&lt;/code>, e o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/475">PR #475&lt;/a> unifica a implementação em crate única &lt;code>keyring-core&lt;/code> com stores nativos de plataforma, substituindo código fragmentado específico de plataforma. Separadamente, o &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/470">PR #470&lt;/a> adiciona funcionalidade de busca de usuário.&lt;/p>
&lt;h3 id="marmot-ts-extrai-app-de-chat-de-referência">Marmot TS Extrai App de Chat de Referência&lt;/h3>
&lt;p>O SDK TypeScript do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> (&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>) fez merge do &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/40">PR #40&lt;/a>, removendo a aplicação de chat de referência embutida e separando-a em repositório independente: &lt;a href="https://github.com/marmot-protocol/marmots-web-chat">marmots-web-chat&lt;/a>. O novo repositório, criado em 6 de fevereiro, é implementação de referência do SDK TypeScript do Marmot com seu próprio pipeline de CI, visualização de chat com abas e sistema de build independente. A separação permite que o SDK foque em questões de biblioteca enquanto o app de chat itera em UX independentemente.&lt;/p>
&lt;p>PR aberto (&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/41">#41&lt;/a>) migra o marmot-ts a ts-mls v2.0.0, trazendo API redesenhada com objetos de contexto unificados, novos utilitários de tratamento de mensagem (criação de evento, leitura, desserialização), helpers de metadados de key package e suporte a eventos de exclusão.&lt;/p>
&lt;h3 id="atualizações-do-alby-hub">Atualizações do Alby Hub&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> fez merge de 5 PRs nesta semana. O &lt;a href="https://github.com/getAlby/hub/pull/2049">PR #2049&lt;/a> adiciona CLI Alby à interface da loja de apps. O &lt;a href="https://github.com/getAlby/hub/pull/2033">PR #2033&lt;/a> corrige tratamento de dados de zap inválidos na lista de transações, e o &lt;a href="https://github.com/getAlby/hub/pull/2046">PR #2046&lt;/a> remove o método &lt;code>ListTransactions&lt;/code> não utilizado da interface LNClient.&lt;/p>
&lt;h3 id="notedeck-entrega-dashboard-e-agentium">Notedeck Entrega Dashboard e Agentium&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente Nostr cross-platform da Damus, fez merge de 6 PRs nesta semana. O &lt;a href="https://github.com/damus-io/notedeck/pull/1247">PR #1247&lt;/a> adiciona app de dashboard inicial. O &lt;a href="https://github.com/damus-io/notedeck/pull/1293">PR #1293&lt;/a> introduz Agentium, ambiente de desenvolvimento multi-agente que transforma o assistente de IA Dave em sistema com modos de IA duais e gerenciamento de agentes baseado em cenas. O &lt;a href="https://github.com/damus-io/notedeck/pull/1276">PR #1276&lt;/a> adiciona compositor de mensagem multilinha com keybindings estilo Signal, e o &lt;a href="https://github.com/damus-io/notedeck/pull/1278">PR #1278&lt;/a> entrega melhorias de desempenho de mídia. PRs abertos de destaque incluem &lt;a href="https://github.com/damus-io/notedeck/pull/1288">infraestrutura outbox&lt;/a> e &lt;a href="https://github.com/damus-io/notedeck/pull/1289">planejamento de Git App&lt;/a> &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34&lt;/a>.&lt;/p>
&lt;h3 id="agora-entrega-grande-reformulação-de-ui">Agora Entrega Grande Reformulação de UI&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a> fez merge de 7 PRs nesta semana junto com seu lançamento v1.0.2. O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/106">PR #106&lt;/a> é o maior, fechando 11 tarefas de UI em configurações, edição de perfil, interações de mapa, resultados de busca, filtragem de comentários e gerenciamento de servidor Blossom. O merge desabilitou botões de reação de usuários não autenticados (que antes recebiam falhas silenciosas ao tentar reagir a posts no mapa), corrigiu panning de mapa na date-line e adicionou texto em negrito nos resultados de busca.&lt;/p>
&lt;p>O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/108">PR #108&lt;/a> adiciona contagem de comentários sob posts de feed e em páginas de thread. O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/107">PR #107&lt;/a> traz retry automático em falhas de carregamento de eventos com botão de reload explícito quando retries se esgotam. O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/104">PR #104&lt;/a> muda navegação de hashtag ao escopo global por padrão, já que o escopo anterior por país frequentemente retornava zero resultados.&lt;/p>
&lt;p>O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/109">PR #109&lt;/a> adiciona etapa de CI que verifica paridade de tradução em todos os idiomas, falhando a build se qualquer chave estiver sem valor. O &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/110">PR #110&lt;/a> recorta notas grandes em feeds ao preservar ritmo de scroll, e o &lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/111">PR #111&lt;/a> corrige problema de zoom em iOS mobile ao comentar em ações causado por tamanhos de fonte pequenos.&lt;/p>
&lt;h3 id="clawstr-entrega-cli-e-botões-de-lightning-zap">Clawstr Entrega CLI e Botões de Lightning Zap&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/clawstr">Clawstr&lt;/a>, a plataforma inspirada no Reddit onde agentes de IA criam e gerenciam comunidades no Nostr, fez merge de 3 PRs nesta semana. O &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/11">PR #11&lt;/a> substitui todos os comandos nak manuais nas definições de habilidades do agente de IA pelo novo pacote &lt;code>@clawstr/cli&lt;/code> (&lt;code>npx -y @clawstr/cli@latest&lt;/code>), removendo construção manual de eventos JSON em favor de comandos CLI e adicionando operações de carteira (init, balance, zap, npc) e busca de texto completo &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>.&lt;/p>
&lt;p>O &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/13">PR #13&lt;/a> adiciona página de documentação &amp;ldquo;For Humans&amp;rdquo; e componente &lt;code>ProfileZapDialog&lt;/code>. O botão de zap aparece em páginas de perfil quando usuário tem endereço Lightning configurado e funciona sem login, usando LNURL-pay diretamente com valores pré-definidos de sats e exibição de QR code. O &lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/12">PR #12&lt;/a> documenta o comando &lt;code>wallet sync&lt;/code>, explicando como pagamentos em endereços Lightning são retidos pelo NPC até que agentes explicitamente sincronizem suas carteiras.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&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: Resposta HyperLogLog de Relay&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45 (Contagem de Eventos)&lt;/a> agora suporta contagem aproximada HyperLogLog (HLL). Relays podem retornar valores de registros HLL de 256 bytes junto com respostas COUNT. Ao fazer merge desses registros de múltiplos relays, aplicações computam cardinalidade aproximada sem baixar conjuntos completos de eventos. O caso de uso principal são contagens de seguidores e reações sem depender de relay único como fonte autoritativa. Até dois eventos de reação consomem mais largura de banda que o payload HLL de 256 bytes. Aplicações podem aplicar correções HyperLogLog++ em cardinalidades pequenas.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">NIP-39: Tags de Identidade Movidas do Kind 0&lt;/a>&lt;/strong> - As tags de claim de identidade &lt;a href="https://nostrcompass.org/pt/topics/nip-39/">NIP-39&lt;/a> (tags &lt;code>i&lt;/code>) foram extraídas de eventos de metadados kind 0 a novo kind 10011 dedicado. A razão: quase nenhum cliente suporta essas tags, que adicionam tamanho a cada busca de kind 0 sem fornecer valor. Primeiro de série de PRs de extração do kind 0 de vitorpamplona (veja &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#campanha-de-redu%c3%a7%c3%a3o-do-kind-0">seção de Notícias&lt;/a>).&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&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 propõe protocolo de acesso a relays Nostr através de tunelamento criptografado via relay rendezvous público. O mecanismo permite acesso a relays atrás de NAT ou firewalls, incluindo relays pessoais rodando em servidores domésticos ou dispositivos móveis. O tunelamento usa eventos kind 24891/24892 com criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> através de relay rendezvous que não pode descriptografar o tráfego. Aplicação prática: qualquer cliente Nostr pode expor armazenamento local (IndexedDB, SQLite) como endpoint de relay na sincronização entre dispositivos. Semânticas padrão NIP-01 (REQ, EVENT, CLOSE, COUNT) passam pelo túnel de forma transparente. Existem referências em Go (ORLY Relay) e 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 propõe Nostr Web Tokens, formato de evento Nostr que transmite claims assinados entre partes web, inspirado em JSON Web Tokens (JWTs). NWT pode representar tanto &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> (HTTP Auth) quanto &lt;a href="https://nostrcompass.org/pt/topics/blossom/">eventos de autorização Blossom&lt;/a>, dando flexibilidade em como e por quanto tempo tokens permanecem válidos. Biblioteca de referência em Go está disponível. Explicação em &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens">vídeo&lt;/a> e &lt;a href="https://github.com/pippellia-btc/nostr-web-tokens#comparisons">comparação detalhada&lt;/a> com NIP-98 e Blossom Auth estão linkadas no PR.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">Simplificação do NIP-47&lt;/a>&lt;/strong> - rolznz propõe remover os métodos &lt;code>multi_&lt;/code> do &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>, que eram complexos de implementar e não ganharam adoção. O PR reduz duplicação em tratamento de criptografia e compatibilidade retroativa, limpando a spec após a &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/#atualiza%C3%A7%C3%B5es-de-nips">adição de hold invoice da semana passada&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 ao Kind de Evento Próprio&lt;/a>&lt;/strong> - vitorpamplona propõe mover verificação NIP-05 do kind 0 ao novo kind 10008, permitindo múltiplos identificadores NIP-05 por usuário e filtragem por endereço NIP-05. Parte da campanha de redução do 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: Endereços Lightning do Kind 0&lt;/a>&lt;/strong> - vitorpamplona propõe extrair lud06/lud16 (endereços Lightning) do kind 0 em kind de evento dedicado conforme &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a>, continuando o esforço de redução do kind 0.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2165">Hiperpersonalização de Perfil&lt;/a>&lt;/strong> - fiatjaf propõe capacidades estendidas de personalização de perfil além do que o kind 0 atualmente suporta.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="deep-dive-de-nip-nip-45-contagem-de-eventos-e-hyperloglog">Deep Dive de NIP: NIP-45 (Contagem de Eventos) e HyperLogLog&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-45/">NIP-45&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">spec&lt;/a>) define como aplicações podem pedir a relays a contagem de eventos que correspondem a filtro sem transferir os eventos em si. O merge do &lt;a href="https://github.com/nostr-protocol/nips/pull/1561">suporte a HyperLogLog&lt;/a> nesta semana adiciona estrutura de dados probabilística que resolve problema fundamental: como contar coisas em múltiplos relays independentes.&lt;/p>
&lt;p>&lt;strong>O Problema:&lt;/strong>&lt;/p>
&lt;p>Contar eventos em relay único é simples: envie requisição COUNT, receba número de volta. Contar pela rede é mais difícil. Se o relay A reporta 50 reações e o relay B reporta 40, o total não é 90 porque muitos eventos existem em ambos os relays. Baixar todos os eventos e deduplicar seria a alternativa, mas aplicações não conseguem fazer isso em escala.&lt;/p>
&lt;p>&lt;strong>HyperLogLog:&lt;/strong>&lt;/p>
&lt;p>HyperLogLog (HLL) é algoritmo probabilístico que estima o número de elementos distintos em conjunto usando quantidade fixa de memória. A versão do NIP-45 usa 256 registros de um byte cada, consumindo exatamente 256 bytes independente de quantos eventos são contados. O algoritmo funciona examinando a representação binária de cada ID de evento e rastreando a posição dos zeros iniciais. Eventos cujos IDs começam com muitos zeros são estatisticamente raros, e sua ocorrência indica conjunto grande.&lt;/p>
&lt;p>&lt;strong>Como Funciona no NIP-45:&lt;/strong>&lt;/p>
&lt;p>Relay respondendo a requisição COUNT pode incluir campo &lt;code>hll&lt;/code> contendo valores de registro codificados em 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>A aplicação coleta valores HLL de múltiplos relays e faz merge deles tomando o valor máximo em cada posição de registro. O HLL mergeado representa a união de todos os conjuntos de eventos entre relays, tratando deduplicação automaticamente. A estimativa final de cardinalidade é computada a partir dos registros mergeados.&lt;/p>
&lt;p>&lt;strong>Precisão:&lt;/strong>&lt;/p>
&lt;p>Com 256 registros, o erro padrão é aproximadamente 5,2%. Contagem verdadeira de 1.000 tipicamente produz estimativa entre 948 e 1.052. Em contagens maiores, o erro relativo permanece constante: contagem verdadeira de 100.000 será estimada em aproximadamente 94.800-105.200. Correções HyperLogLog++ melhoram a precisão em cardinalidades pequenas (abaixo de ~200), onde o algoritmo básico tende a superestimar.&lt;/p>
&lt;p>&lt;strong>Por Que Importa:&lt;/strong>&lt;/p>
&lt;p>Métricas sociais (contagens de seguidores, reações, reposts) são recurso central de aplicações de mídia social. A alternativa ao HLL é consultar relay único &amp;ldquo;confiável&amp;rdquo; (centralizando a contagem) ou baixar todos os eventos de todos os relays (desperdiçando largura de banda). HLL permite obter boa contagem aproximada de múltiplos relays com overhead total de 256 bytes por relay, independente da contagem real. Até dois eventos de reação consomem mais largura de banda que payload HLL completo.&lt;/p>
&lt;p>A spec fixa o número de registros em 256 por interoperabilidade. Todos os relays produzem valores HLL que podem ser mergeados, independente de qual software de relay executam. Essa padronização permite que aplicações implementem suporte HLL uma vez e se beneficiem de cada relay que o suporta.&lt;/p>
&lt;p>&lt;strong>Status Atual:&lt;/strong>&lt;/p>
&lt;p>O PR foi aberto por fiatjaf e esteve em discussão por vários meses antes de ser mergeado nesta semana. Relays precisarão adicionar computação HLL aos seus handlers COUNT. Aplicações precisarão adicionar merge HLL à sua lógica de agregação de contagem.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-96-armazenamento-de-arquivos-http-e-a-transição-ao-blossom">Deep Dive de NIP: NIP-96 (Armazenamento de Arquivos HTTP) e a Transição ao Blossom&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-96/">NIP-96&lt;/a> (&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">spec&lt;/a>) definiu como aplicações Nostr fazem upload, download e gerenciam arquivos em servidores de mídia HTTP. Agora marcado como &amp;ldquo;não recomendado&amp;rdquo; em favor do &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> (hospedagem de mídia baseada em BUD), o NIP-96 permanece relevante nesta semana porque Angor v0.2.5 &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#angor-v025">adicionou configuração de servidor NIP-96&lt;/a> e ZSP v0.3.1 &lt;a href="https://nostrcompass.org/pt/newsletters/2026-02-11-newsletter/#zsp-v031">faz upload a servidores Blossom&lt;/a>, ilustrando transição de protocolo em andamento.&lt;/p>
&lt;p>&lt;strong>Como o NIP-96 Funciona:&lt;/strong>&lt;/p>
&lt;p>A aplicação descobre as capacidades de servidor de arquivos buscando &lt;code>/.well-known/nostr/nip96.json&lt;/code>, que retorna a URL da API, tipos de conteúdo suportados, limites de tamanho e transformações de mídia disponíveis:&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>O upload consiste em POST &lt;code>multipart/form-data&lt;/code> à URL da API com header de autorização &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> (evento Nostr assinado provando a identidade de quem faz o upload). O servidor retorna estrutura de metadados de arquivo &lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a> contendo a URL do arquivo, hashes SHA-256 originais e transformados, tipo MIME e dimensõ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;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>Downloads usam requisições GET a &lt;code>&amp;lt;api_url&amp;gt;/&amp;lt;sha256-hash&amp;gt;&lt;/code>, com parâmetros de query opcionais em transformações do lado do servidor como redimensionamento de imagem. Exclusão usa DELETE com auth NIP-98, e somente quem fez o upload original pode excluir seus arquivos. Endpoint de listagem de arquivos retorna resultados paginados dos uploads de dado usuário.&lt;/p>
&lt;p>Usuários publicam eventos kind 10096 declarando seus servidores de upload preferidos, permitindo que aplicações selecionem automaticamente o servidor correto sem configuração manual.&lt;/p>
&lt;p>&lt;strong>Por Que Foi Depreciado:&lt;/strong>&lt;/p>
&lt;p>NIP-96 vinculava URLs de arquivo a servidores específicos. Se &lt;code>files.example.com&lt;/code> caísse, toda nota Nostr referenciando as URLs daquele servidor perdia sua mídia. O servidor era o endereço, e o endereço era frágil.&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> (Blobs Stored Simply on Mediaservers) inverte isso tornando o hash SHA-256 do conteúdo do arquivo o identificador canônico. URL Blossom se parece com &lt;code>https://blossom.example/&amp;lt;sha256&amp;gt;.png&lt;/code>, mas qualquer servidor Blossom hospedando o mesmo arquivo o serve no mesmo caminho de hash. Se servidor desaparece, a aplicação consulta outro servidor pelo mesmo hash. Endereçamento por conteúdo torna os dados portáveis entre servidores por padrão.&lt;/p>
&lt;p>Blossom simplifica a API. NIP-96 usava uploads multipart form com respostas JSON, políticas de transformação e endpoint de descoberta. Blossom usa PUT simples em uploads, GET em downloads e eventos Nostr assinados (não headers HTTP) na autorização. A especificação do Blossom é dividida em documentos modulares: BUD-01 cobre protocolo de servidor, autorização e recuperação, BUD-02 cobre upload de blob, BUD-03 cobre servidores de usuários, e BUD-04 cobre espelhamento entre servidores.&lt;/p>
&lt;p>A depreciação aconteceu em setembro de 2025 via &lt;a href="https://github.com/nostr-protocol/nips/pull/2047">PR #2047&lt;/a>, que marcou NIP-96 como &amp;ldquo;não recomendado&amp;rdquo; no índice de NIPs.&lt;/p>
&lt;p>&lt;strong>A Transição na Prática:&lt;/strong>&lt;/p>
&lt;p>Servidores como nostr.build e void.cat suportavam NIP-96 e adicionaram ou migraram a endpoints Blossom. As aplicações estão em vários estágios: o lançamento v0.2.5 do Angor adicionou configuração de servidor NIP-96 em imagens de projeto, enquanto o lançamento v0.3.1 do ZSP faz upload de artefatos exclusivamente a servidores Blossom com headers &lt;code>Content-Digest&lt;/code> em conformidade com o protocolo. Amethyst e Primal suportam uploads Blossom. A coexistência provavelmente continuará até que os softwares NIP-96 restantes completem sua migração.&lt;/p>
&lt;p>&lt;strong>O Que Permanece:&lt;/strong>&lt;/p>
&lt;p>Eventos de preferência de servidor kind 10096 continuam úteis na seleção de servidor Blossom. Metadados de arquivo NIP-94 (eventos kind 1063) ainda descrevem propriedades de arquivo independente de qual protocolo de upload os criou. O hashing SHA-256 que NIP-96 usava em URLs de download se tornou a base do endereçamento por conteúdo do Blossom. O design do NIP-96 informou o que o Blossom simplificou: a lição foi que hospedagem de mídia em rede descentralizada requer armazenamento endereçado por conteúdo ao nível da resistência à censura da camada de relay.&lt;/p>
&lt;hr>
&lt;p>É isso por esta semana. Compartilhe notícias, sugira cobertura de projeto ou envie feedback via &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">DM NIP-17&lt;/a>, ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #8</title><link>https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-02-04-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> rust-nostr entrega um grande redesign de API com 21 PRs reformulando a arquitetura do SDK. Nostria 3.0 lança com navegação em painel duplo, gerenciamento de listas e uma reformulação completa da UI. Vector adiciona aceleração SIMD alcançando speedups de 65x-184x e entrega suporte ao protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> para mensagens de grupo criptografadas. Frostr traz assinatura de limiar para iOS via TestFlight. Damus implementa dicas de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19 (Entidades Codificadas em Bech32)&lt;/a> para descoberta de conteúdo cross-relay. Primal Android adiciona criptografia NWC e exportações de transações de carteira. nostr-tools e NDK recebem melhorias de confiabilidade. NIP-82 (Aplicações de Software) expande para cobrir 98% das plataformas de dispositivos. O repositório de NIPs faz merge de suporte a hold invoice para &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Novas propostas de protocolo incluem NIP-74 para podcasting, NIP-DB para bancos de dados de eventos em navegador, e uma suíte TRUSTed Filters para curadoria descentralizada de conteúdo. Novos projetos incluem Instagram to Nostr v2 para migração de conteúdo, Pod21 lançando um marketplace descentralizado de impressão 3D, Clawstr introduzindo comunidades gerenciadas por agentes de IA, e Shosho e NosCall expandindo capacidades de streaming ao vivo e chamadas de vídeo.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> rust-nostr entrega um grande redesign de API com 21 PRs reformulando a arquitetura do SDK. Nostria 3.0 lança com navegação em painel duplo, gerenciamento de listas e uma reformulação completa da UI. Vector adiciona aceleração SIMD alcançando speedups de 65x-184x e entrega suporte ao protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> para mensagens de grupo criptografadas. Frostr traz assinatura de limiar para iOS via TestFlight. Damus implementa dicas de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19 (Entidades Codificadas em Bech32)&lt;/a> para descoberta de conteúdo cross-relay. Primal Android adiciona criptografia NWC e exportações de transações de carteira. nostr-tools e NDK recebem melhorias de confiabilidade. NIP-82 (Aplicações de Software) expande para cobrir 98% das plataformas de dispositivos. O repositório de NIPs faz merge de suporte a hold invoice para &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a>. Novas propostas de protocolo incluem NIP-74 para podcasting, NIP-DB para bancos de dados de eventos em navegador, e uma suíte TRUSTed Filters para curadoria descentralizada de conteúdo. Novos projetos incluem Instagram to Nostr v2 para migração de conteúdo, Pod21 lançando um marketplace descentralizado de impressão 3D, Clawstr introduzindo comunidades gerenciadas por agentes de IA, e Shosho e NosCall expandindo capacidades de streaming ao vivo e chamadas de vídeo.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="rust-nostr-entrega-grande-redesign-de-api">rust-nostr Entrega Grande Redesign de API&lt;/h3>
&lt;p>O SDK &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> passou por uma reformulação arquitetural significativa esta semana com 21 PRs mergeados introduzindo breaking changes em toda a biblioteca. O redesign afeta APIs centrais das quais a maioria dos desenvolvedores Rust depende.&lt;/p>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1245">PR #1245&lt;/a> redesenha APIs de notificação, enquanto &lt;a href="https://github.com/rust-nostr/nostr/pull/1244">PR #1244&lt;/a> substitui &lt;code>RelayNotification::Shutdown&lt;/code> por &lt;code>RelayStatus::Shutdown&lt;/code> para tratamento de estado mais limpo. As APIs de signer agora se alinham com outros padrões do SDK via &lt;a href="https://github.com/rust-nostr/nostr/pull/1243">PR #1243&lt;/a>. Métodos de Client e Relay receberam limpeza em &lt;a href="https://github.com/rust-nostr/nostr/pull/1242">PR #1242&lt;/a>, e opções de cliente agora usam um padrão builder (&lt;a href="https://github.com/rust-nostr/nostr/pull/1241">PR #1241&lt;/a>).&lt;/p>
&lt;p>APIs de envio de mensagens foram redesenhadas em &lt;a href="https://github.com/rust-nostr/nostr/pull/1240">PR #1240&lt;/a>, cancelamento de subscrição REQ em &lt;a href="https://github.com/rust-nostr/nostr/pull/1239">PR #1239&lt;/a>, e remoção de relay em &lt;a href="https://github.com/rust-nostr/nostr/pull/1229">PR #1229&lt;/a>. Um &lt;a href="https://github.com/rust-nostr/nostr/pull/1246">PR aberto #1246&lt;/a> adiciona suporte para APIs bloqueantes para completar o redesign.&lt;/p>
&lt;p>As mudanças trazem consistência ao SDK mas exigirão esforço de migração de projetos existentes. Desenvolvedores construindo sobre rust-nostr devem revisar o changelog cuidadosamente antes de atualizar.&lt;/p>
&lt;h3 id="instagram-to-nostr-v2-permite-migração-de-conteúdo">Instagram to Nostr v2 Permite Migração de Conteúdo&lt;/h3>
&lt;p>Uma nova ferramenta permite que criadores migrem seu conteúdo existente de plataformas centralizadas para o Nostr. &lt;a href="https://github.com/primalpaul1/instagram-to-nostr-v2">Instagram to Nostr v2&lt;/a> suporta importação do Instagram, TikTok, Twitter e Substack sem exigir acesso às chaves privadas do usuário.&lt;/p>
&lt;p>A ferramenta aborda uma barreira comum de onboarding: usuários hesitantes em começar do zero em uma nova plataforma podem agora preservar seu histórico de conteúdo. Ela também suporta presentear contas Nostr para novos usuários ou propor conteúdo para contas existentes, tornando-a útil para ajudar outros na transição para o protocolo.&lt;/p>
&lt;h3 id="pod21-rede-descentralizada-de-impressão-3d">Pod21: Rede Descentralizada de Impressão 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 impressoras 3D com compradores usando Nostr para coordenação de marketplace. A plataforma inclui um bot de DM compatível com &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17 (Mensagens Diretas Privadas)&lt;/a> que lida com interações de marketplace, permitindo que compradores solicitem impressões e negociem com makers através de mensagens diretas criptografadas.&lt;/p>
&lt;p>Makers listam sua capacidade e recursos de impressão; compradores navegam nas listagens e iniciam pedidos via o bot. A arquitetura segue um padrão similar a outras aplicações de comércio Nostr: descoberta baseada em relay, mensagens criptografadas para coordenação de pedidos, e Lightning para liquidação. Pod21 se junta a Ridestr e Shopstr como aplicações Nostr coordenando transações do mundo real através do protocolo.&lt;/p>
&lt;h3 id="clawstr-rede-social-de-agentes-de-ia">Clawstr: Rede Social de Agentes de IA&lt;/h3>
&lt;p>&lt;a href="https://github.com/clawstr/clawstr">Clawstr&lt;/a> lança como uma plataforma inspirada no Reddit onde agentes de IA criam e gerenciam comunidades no Nostr. A plataforma permite que agentes autônomos estabeleçam comunidades temáticas, curem conteúdo e interajam com usuários. Comunidades funcionam como subreddits mas com moderadores e curadores de IA guiando discussões. A arquitetura usa o protocolo aberto do Nostr para interações agente-para-agente e agente-para-humano, estabelecendo um novo modelo para formação de comunidades em mídias sociais descentralizadas.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="ridestr-v020-roadflare-release">Ridestr v0.2.0: RoadFlare Release&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> entregou &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.0">v0.2.0&lt;/a>, apelidada de &amp;ldquo;RoadFlare Release&amp;rdquo;, introduzindo redes pessoais de compartilhamento de caronas. O recurso permite que passageiros adicionem motoristas favoritos a uma rede de confiança. Motoristas aprovam seguidores e compartilham localizações criptografadas, permitindo que passageiros vejam quando motoristas de confiança estão online e próximos. Solicitações de corrida vão diretamente para motoristas conhecidos.&lt;/p>
&lt;p>A confiabilidade de pagamento melhorou com recuperação automática de escrow, melhor sincronização de carteira entre dispositivos, e processamento de pagamento mais rápido via polling progressivo. &lt;a href="https://github.com/variablefate/ridestr/pull/37">PR #37&lt;/a> adiciona a infraestrutura da Fase 5-6 suportando esses recursos. &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.1">v0.2.1&lt;/a> seguiu com hotfixes para bugs de diálogo de pagamento e o fluxo de &amp;ldquo;Adicionar aos Favoritos&amp;rdquo; pós-corrida.&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>, o cliente cross-platform de sondreb construído para escala global, entregou a versão 3.0 com uma reformulação completa da UI, novo logo e centenas de correções. O lançamento representa um ciclo de desenvolvimento intensivo de seis semanas.&lt;/p>
&lt;p>Navegação em painel duplo é a maior mudança de UX, permitindo que usuários desktop reduzam troca de contexto ao navegar entre listas, detalhes e threads. Uma nova seção Home fornece uma visão geral de todos os recursos disponíveis, e todas as telas compartilham uma barra de ferramentas, layout e funcionalidade unificados.&lt;/p>
&lt;p>Gerenciamento de listas é a atualização de recurso mais significativa, integrando-se em toda a aplicação. Usuários podem gerenciar listas de perfis e filtrar conteúdo em qualquer recurso: Streams, Music ou Feeds. Cansado de spam em threads? Filtre por favoritos para ver apenas suas respostas. Quick Zaps adiciona zapping com um toque com valores configuráveis. Copy/Screenshot gera screenshots para a área de transferência para compartilhar eventos em qualquer lugar. Muted Words agora filtra em campos de perfil (name, display_name, NIP-05), permitindo que usuários bloqueiem todos os perfis bridgeados com uma única palavra banida. Configurações se tornaram pesquisáveis para mudanças de configuração mais rápidas.&lt;/p>
&lt;p>O lançamento adiciona renderização de solicitações de pagamento BOLT11 e BOLT12, seleção de tamanho de texto e fonte, e mensagens &amp;ldquo;Nota para Si Mesmo&amp;rdquo; na seção de Mensagens com renderização de conteúdo referenciado como artigos e eventos. O novo diálogo de Compartilhar permite compartilhamento rápido via email, websites ou mensagens diretas para múltiplos destinatários. Recursos adicionais incluem conjuntos de emoji personalizados, Interests (listas de hashtags como feeds dinâmicos), Bookmarks, Public Relay Feeds e personalização completa de menu incluindo qual opção o ícone do Nostria abre.&lt;/p>
&lt;p>Disponível no Android, iOS, Windows e web em &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>A suíte de bibliotecas &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> de hzrd149 lançou v5.1.0 em todos os pacotes. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%405.1.0">applesauce-signers&lt;/a> adiciona suporte para métodos &lt;code>switch_relays&lt;/code> e &lt;code>ping&lt;/code> em remote signers Nostr Connect, útil para gerenciar conexões de signer programaticamente. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-loaders%405.1.0">applesauce-loaders&lt;/a> introduz &lt;code>loadAsyncMap&lt;/code> para carregamento async paralelo. &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-react%405.1.0">applesauce-react&lt;/a> adiciona argumentos de padding para &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> atualiza mapeamento de evento para store para lidar com strings diretamente sem exigir &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 alcançou &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a> com correções de estabilidade de mattn. O lançamento previne panics quando URLs de mint carecem do separador &lt;code>://&lt;/code>, valida erros de dateparser antes de usar valores de data e lida com casos extremos em parsing de tags de desafio AUTH. Essas correções defensivas tornam o CLI mais resiliente ao processar inputs malformados.&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>, o signer desktop cross-platform, entregou &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.7">v0.3.7&lt;/a> adicionando suporte a Nostr App Browser com assinatura &lt;a href="https://nostrcompass.org/pt/topics/nip-07/">NIP-07 (Interface de Extensão de Navegador)&lt;/a>. O lançamento registra eventos de criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04 (Mensagens Diretas Criptografadas)&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44 (Criptografia Versionada)&lt;/a>, permitindo que usuários rastreiem quais aplicações solicitam operações de criptografia. O segmento de navegador agora filtra por plataforma para mostrar apenas web apps.&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>, o aplicativo de mensagens com capacidade offline usando Nostr e mesh Bluetooth, lançou &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.1">v1.5.1&lt;/a> com endurecimento de segurança iOS. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/1012">PR #1012&lt;/a> valida assinaturas de evento Nostr antes do processamento, rejeita giftwraps e pacotes incorporados inválidos, limita payloads superdimensionados e bloqueia IDs de remetente de anúncio BLE falsificados. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/998">PR #998&lt;/a> corrige autenticação de mesh BLE iOS vinculando IDs de remetente a UUIDs de conexão, prevenindo spoofing de identidade na rede mesh. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/972">PR #972&lt;/a> adiciona limitação de taxa de notificação para prevenir floods de descoberta de peer quando múltiplos dispositivos mesh estão próximos.&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> lançou &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.39.2%2B6495">v1.39.2&lt;/a> adicionando suporte &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect via &lt;a href="https://github.com/keychat-io/keychat-app/pull/148">PR #148&lt;/a>. Usuários agora podem conectar carteiras Lightning externas para pagamentos dentro do aplicativo de mensagens. O lançamento também adiciona notificações desktop 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>, o cliente Flutter cross-platform, entregou &lt;a href="https://github.com/haorendashu/nostrmo/releases/tag/3.5.0">v3.5.0&lt;/a> reformulando seu sistema de feed. A atualização substitui feeds fixos por alternativas personalizáveis: General Feed, Mentioned Feed e Relay Feed, cada um configurável através de novas páginas de edição. O lançamento implementa suporte ao modelo outbox para melhor roteamento de eventos e expande funcionalidade de relay local com limites de tamanho configuráveis e suporte a subscrição.&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>, o aplicativo de streaming ao vivo para Nostr, lançou &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.11.1">v0.11.1&lt;/a> com capacidades de gravação e VOD. A atualização adiciona indicadores de presença de sala mostrando quem está assistindo streams, conversas de chat com threads para melhor organização de discussão, e suporte Nostr Connect no iOS via &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>. Streamers agora podem salvar suas transmissões para visualização posterior enquanto mantêm interações de chat em tempo real com sua audiência.&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>, o aplicativo de chamadas de áudio e vídeo para Nostr, entregou &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.0-release">v0.5.0&lt;/a> com grupos de contato para organizar chamadas por categoria, gerenciamento de relay para otimização de conexão, e configurações de servidor ICE configuráveis para melhor traversal de NAT. O lançamento também adiciona suporte a modo escuro. NosCall usa Nostr para sinalização e coordenação de chamadas, permitindo chamadas peer-to-peer sem 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>, o cliente de vídeos curtos em loop de rabble, lançou &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.4">1.0.4&lt;/a> como um alpha pré-lançamento Android antes de sua submissão na Zapstore. O lançamento foca em testar gerenciamento de chave Nostr, incluindo importação de nsec, assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a> com nsecBunker e Amber, e tratamento de URL nostrconnect://. A equipe está solicitando feedback sobre compatibilidade de relay e interoperabilidade de vídeo com outros clientes. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1265">PR #1265&lt;/a> corrige tratamento de caminho de arquivo iOS que causava clipes de vídeo se tornarem inutilizáveis após atualizações do app armazenando caminhos relativos em vez de caminhos de container absolutos. &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1251">PR #1251&lt;/a> corrige problemas de navegação ao visualizar perfis de comentários.&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> entregou &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.2">v0.12.2&lt;/a> como um lançamento estável, consolidando as &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-28-newsletter/#zeus-v0122-beta---correcoes-nwc">correções NWC cobertas em edições 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>) lançou &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo para iOS&lt;/a> no &lt;a href="https://testflight.apple.com/join/72hjQe3J">TestFlight&lt;/a>, expandindo assinatura de limiar para dispositivos Apple. Frostr usa assinaturas FROST (Flexible Round-Optimized Schnorr Threshold) para dividir chaves nsec em shares distribuídos entre dispositivos, permitindo assinatura k-de-n com tolerância a falhas. Usuários entrando em &amp;ldquo;modo demo&amp;rdquo; participam de um experimento de assinatura de limiar 2-de-2 ao vivo, demonstrando as capacidades de coordenação em tempo real do protocolo. O lançamento iOS se junta ao &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo para Android&lt;/a> (v0.1.2), que foi entregue em dezembro com suporte &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55 (Android Signer)&lt;/a> para solicitações de assinatura cross-app. Ambos os clientes móveis complementam o &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo desktop&lt;/a> e a extensão de navegador &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a>.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="damus-implementa-dicas-de-relay-nip-19">Damus Implementa Dicas de Relay NIP-19&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> fez merge do &lt;a href="https://github.com/damus-io/damus/pull/3477">PR #3477&lt;/a>, implementando consumo de dicas de relay &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> para busca de eventos. O recurso permite visualizar notas em relays não presentes no pool configurado do usuário extraindo dicas de referências &lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10 (Reply Threads)&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-18/">NIP-18 (Reposts)&lt;/a> e NIP-19. A implementação usa conexões de relay efêmeras com limpeza por contagem de referência, evitando expansão permanente do pool de relay.&lt;/p>
&lt;p>Correções adicionais incluem parsing de Lightning invoice (&lt;a href="https://github.com/damus-io/damus/pull/3566">PR #3566&lt;/a>), carregamento de visualização de carteira (&lt;a href="https://github.com/damus-io/damus/pull/3554">PR #3554&lt;/a>), timing de lista de relay (&lt;a href="https://github.com/damus-io/damus/pull/3553">PR #3553&lt;/a>), e preloading de perfil para reduzir &amp;ldquo;popping&amp;rdquo; visual (&lt;a href="https://github.com/damus-io/damus/pull/3550">PR #3550&lt;/a>). Um &lt;a href="https://github.com/damus-io/damus/pull/3590">draft PR #3590&lt;/a> mostra suporte a DM privado &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> em progresso.&lt;/p>
&lt;h3 id="primal-android-entrega-criptografia-nwc">Primal Android Entrega Criptografia NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> teve uma semana muito ativa com 18 PRs mergeados focados em infraestrutura de carteira. O app agora se integra com Spark, o protocolo Lightning auto-custodial da Lightspark. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> adiciona suporte a criptografia NWC, enquanto &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/872">PR #872&lt;/a> envia eventos de info NWC quando conexões são estabelecidas.&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/870">PR #870&lt;/a> permite exportação CSV para transações de carteira, útil para contabilidade e propósitos fiscais. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/716">PR #716&lt;/a> adiciona um alternador de conta local no Editor de Notas. Múltiplas correções de restauração de carteira (&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>) abordam casos extremos para usuários com configurações de carteira não-Spark.&lt;/p>
&lt;h3 id="sdk-typescript-marmot-adiciona-histórico-de-mensagens">SDK TypeScript Marmot Adiciona Histórico de Mensagens&lt;/h3>
&lt;p>A implementação TypeScript do protocolo &lt;a href="https://github.com/marmot-protocol/marmot">Marmot&lt;/a> continua em desenvolvimento. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR #38&lt;/a> por hzrd149 implementa persistência de histórico de mensagens com paginação para a aplicação de chat de referência, enquanto &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/39">PR #39&lt;/a> melhora a ergonomia da biblioteca.&lt;/p>
&lt;p>No lado Rust, &lt;a href="https://github.com/marmot-protocol/mdk/pull/161">PR #161&lt;/a> implementa tratamento de estado com retry para preservar contexto de mensagem em falhas, e &lt;a href="https://github.com/marmot-protocol/mdk/pull/164">PR #164&lt;/a> muda para std::sync::Mutex para evitar panics do tokio com SQLite. O backend whitenoise-rs adiciona &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">integração 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">atualiza para MDK e nostr-sdk 0.44&lt;/a> (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">PR #467&lt;/a>), e introduz streaming de notificação em tempo real via &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/460">PR #460&lt;/a> com tipos de evento NewMessage e GroupInvite.&lt;/p>
&lt;h3 id="haven-adiciona-atualização-periódica-de-wot">HAVEN Adiciona Atualização Periódica de WoT&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>, o relay pessoal, fez merge do &lt;a href="https://github.com/bitvora/haven/pull/108">PR #108&lt;/a> adicionando atualização periódica de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a>. O recurso garante que pontuações de confiança permaneçam atualizadas conforme os grafos sociais dos usuários evoluem, melhorando a precisão da filtragem de spam ao longo do tempo.&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>, a biblioteca JavaScript principal, recebeu múltiplas melhorias esta semana. Commits incluem uma &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/c2423f7f31853d97fef2e3d649204cec328e81d5">correção para parsing de hashtag após quebras de linha&lt;/a> em menções &lt;a href="https://nostrcompass.org/pt/topics/nip-27/">NIP-27 (Referências em Notas de Texto)&lt;/a>, &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/ab802c8dbe35d29feb732ba54e82a346c21c32e2">poda automática de objetos de relay quebrados com rastreamento de inatividade&lt;/a> para limpeza de conexão, &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/be9b91318fea6a0cb154b8734a15b50a4c1e7638">remoção de fila de mensagens&lt;/a> para otimização de desempenho single-threaded, e &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/05b1fba5113182ac0aa3c72d1f511cd956a7c139">exportações de arquivos fonte&lt;/a> para melhores imports 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> entregou &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/26abea24726ed844fdd091744ac9f768f1a530a0">beta.71&lt;/a> com uma &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/33e759508bc656dc45d3d77c741edf581af323f3">correção para reconexão após ciclos de sleep/wake do dispositivo e tratamento de conexão obsoleta&lt;/a>, abordando problemas de confiabilidade para aplicações móveis.&lt;/p>
&lt;h3 id="notedeck">Notedeck&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>, o cliente desktop da equipe Damus, tem um &lt;a href="https://github.com/damus-io/notedeck/pull/1279">PR aberto #1279&lt;/a> adicionando um visualizador &lt;a href="https://nostrcompass.org/pt/topics/nip-34/">NIP-34 (Colaboração Git)&lt;/a>. Isso permitiria navegar repositórios git, patches e issues publicados em relays Nostr diretamente dentro do cliente, tornando Notedeck um potencial front-end para fluxos de trabalho baseados em ngit.&lt;/p>
&lt;h3 id="njump">njump&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>, o gateway web Nostr, adicionou suporte para dois tipos de evento &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51 (Listas)&lt;/a> via &lt;a href="https://github.com/fiatjaf/njump/pull/152">PR #152&lt;/a>. O gateway agora renderiza kind:30000 Follow Sets, que são agrupamentos categorizados de usuários que clientes podem exibir em diferentes contextos, e kind:39089 Starter Packs, que são coleções de perfis curadas projetadas para compartilhamento e seguimento em grupo. Essas adições permitem que njump exiba listas curadas pela comunidade quando usuários compartilham links nevent.&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>, o cliente Android, corrigiu um bug prevenindo compartilhamento de vídeo da visualização do player (&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1695">PR #1695&lt;/a>). A opção &amp;ldquo;Compartilhar vídeo&amp;rdquo; estava falhando em aparecer porque o parâmetro de conteúdo não estava sendo passado para o componente de botões de controle. Usuários agora podem compartilhar conteúdo de vídeo Nostr para outros apps diretamente do player. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1693">PR #1693&lt;/a> corrige crashes de desserialização Jackson JSON que ocorriam ao analisar certos eventos malformados.&lt;/p>
&lt;h3 id="jumble">Jumble&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, o cliente web focado em navegação de feed de relay, adicionou uploads de arquivo de áudio via clipboard em &lt;a href="https://github.com/CodyTseng/jumble/pull/743">PR #743&lt;/a>. Usuários agora podem colar arquivos de áudio diretamente no editor de post, que faz upload para servidores de mídia configurados e incorpora a URL na nota. O recurso espelha a funcionalidade de colar imagem existente.&lt;/p>
&lt;h3 id="flotilla">Flotilla&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/flotilla">Flotilla&lt;/a>, o cliente de comunidades &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29 (Grupos Baseados em Relay)&lt;/a> de hodlbod, entregou notificações via &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a>. A atualização refatora o sistema de alertas de polling baseado em âncora para notificações pull locais para web e notificações push para mobile. A arquitetura implementa o padrão NIP-9a proposto (veja &lt;a href="https://github.com/nostr-protocol/nips/pull/2194">PR #2194&lt;/a> abaixo), onde usuários registram callbacks de webhook com relays e recebem payloads de evento criptografados quando filtros correspondem.&lt;/p>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>, a aplicação de formulários nativa do Nostr, adicionou importação de formulário e suporte a formulário criptografado em &lt;a href="https://github.com/abh3po/nostr-forms/pull/422">PR #422&lt;/a>. Usuários agora podem importar formulários existentes por meio de um link de resposta ou outras instâncias Formstr. O recurso de criptografia permite que criadores de formulário restrinjam respostas para que apenas destinatários designados possam ler submissões, útil para pesquisas coletando informações sensíveis.&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>), construído em &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>, adicionou compartilhamento &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> DM para enquetes via &lt;a href="https://github.com/abh3po/nostr-polls/pull/141">PR #141&lt;/a> e &lt;a href="https://github.com/abh3po/nostr-polls/pull/142">PR #142&lt;/a>. Usuários agora podem compartilhar enquetes diretamente para contatos através de mensagens diretas criptografadas.&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>, a coleção de esquemas de verificação JSON para eventos Nostr, adicionou cobertura &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> via &lt;a href="https://github.com/nostrability/schemata/pull/59">PR #59&lt;/a>. A atualização inclui esquemas para eventos kind 13 (seal) e kind 1059 (gift wrap), complementando a cobertura de esquema &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> existente.&lt;/p>
&lt;h3 id="vector">Vector&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>, o mensageiro desktop focado em privacidade usando &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>, &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> para criptografia com zero metadados, fez merge do &lt;a href="https://github.com/VectorPrivacy/Vector/pull/39">PR #39&lt;/a> introduzindo otimizações de desempenho aceleradas por SIMD. Codificação hex roda 65x mais rápido, geração de preview de imagem até 38x mais rápido, e buscas de mensagem 184x mais rápido via indexação de busca binária. O PR adiciona intrinsics ARM64 NEON para Apple Silicon e AVX2/SSE2 x86_64 com detecção em runtime para Windows e Linux. Uso de memória caiu com structs de mensagem reduzidas de 472 para 128 bytes e armazenamento de npub cortado em 99,6% através de interning.&lt;/p>
&lt;p>Vector v0.3.0 (dezembro de 2025) integrou &lt;a href="https://github.com/marmot-protocol/mdk">MDK (Marmot Development Kit)&lt;/a> para mensagens de grupo baseadas em protocolo MLS, trazendo grupos criptografados de ponta a ponta com forward secrecy para o cliente. Compartilhamento de arquivo MIP-04 agora lida com anexos imeta para grupos MLS, projetado para interoperabilidade com &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-28-newsletter/#marmot-protocol-updates">White Noise&lt;/a>. O lançamento também introduziu uma plataforma Mini Apps com jogos multiplayer P2P baseados em WebXDC, uma loja de apps descentralizada chamada The Nexus, integração de carteira PIVX para pagamentos in-app, edição de mensagens com rastreamento de histórico completo, e redução de memória de 4x durante uploads de imagem.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mergeado:&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: Suporte a Hold Invoice&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a> agora suporta hold invoices, permitindo fluxos de pagamento avançados onde receptores devem explicitamente liquidar ou cancelar pagamentos. O PR adiciona três novos métodos RPC: &lt;code>make_hold_invoice&lt;/code> cria um hold invoice usando uma preimage e hash de pagamento pré-gerados, &lt;code>settle_hold_invoice&lt;/code> reivindica pagamento fornecendo a preimage original, e &lt;code>cancel_hold_invoice&lt;/code> rejeita pagamento usando seu hash de pagamento. Uma nova notificação &lt;code>hold_invoice_accepted&lt;/code> dispara quando um pagador bloqueia o pagamento. Isso permite casos de uso como conteúdo pay-to-unlock, sistemas de escrow de marketplace e gating de pagamento. Implementações já estão em andamento em &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> e &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/pt/topics/nip-05/">NIP-05 (Verificação de Domínio)&lt;/a> agora explicitamente exige minúsculas tanto para chaves públicas hex quanto para nomes locais no arquivo &lt;code>nostr.json&lt;/code>. Isso estava implícito na spec mas não declarado, causando problemas de interoperabilidade quando algumas implementações usavam maiúsculas e minúsculas misturadas enquanto outras normalizavam para minúsculas. Clientes validando identificadores NIP-05 agora devem rejeitar quaisquer respostas &lt;code>nostr.json&lt;/code> contendo caracteres maiúsculos em chaves ou nomes.&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/pt/topics/nip-73/">NIP-73 (Geotags)&lt;/a> agora suporta códigos de país ISO 3166 como alternativa a geohashes. Eventos podem incluir tags &lt;code>[&amp;quot;g&amp;quot;, &amp;quot;US&amp;quot;, &amp;quot;countryCode&amp;quot;]&lt;/code> para indicar localização em nível de país sem exigir coordenadas precisas. Isso permite filtragem e descoberta de conteúdo baseada em país para aplicações onde localização exata é desnecessária ou indesejável. O PR também adicionou um exemplo de geohash faltante à documentação da spec.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&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: Aplicações de Software&lt;/a>&lt;/strong> - franzap anunciou uma grande atualização para esta especificação draft, que define como aplicações de software são distribuídas via Nostr usando eventos kind 30063 de release. A atualização agora cobre aproximadamente 98% das plataformas de dispositivos globalmente, incluindo macOS, Linux, Windows, FreeBSD, ambientes WASM, extensões VS Code, extensões Chrome e Web Bundles/PWAs. A equipe está focando em seguida no suporte Android, PWA e iOS, convidando desenvolvedores a convergir neste padrão compartilhado. Zapstore planeja migrar para o novo formato nas 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 endereçáveis para shows de podcast (kind 30074) e episódios (kind 30075). Shows incluem metadados como título, descrição, categorias e imagens de capa. Episódios referenciam seu show pai e incluem URLs de enclosure, durações e marcadores de capítulo. A spec se integra com padrões de metadados Podcasting 2.0 e inclui tags de valor para monetização V4V (value-for-value) via Lightning. Plataformas como &lt;a href="https://transmit.fm">transmit.fm&lt;/a>, uma plataforma de publicação de podcast nativa do Nostr, podem publicar diretamente para relays usando este formato, permitindo que podcasters distribuam conteúdo sem intermediários.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2207">NIP-FR: Notas Apenas para Amigos&lt;/a>&lt;/strong> - Propõe um mecanismo para publicar notas visíveis apenas para uma lista de amigos definida pelo usuário usando uma chave simétrica compartilhada chamada ViewKey. O autor criptografa notas (kind 2044) com a ViewKey usando NIP-44. A ViewKey em si é distribuída a cada amigo uma vez via &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a>. Amigos que possuem a ViewKey podem descriptografar e ler as notas; todos os outros veem apenas texto cifrado. Quando o autor remove um amigo, a ViewKey é rotacionada: uma nova chave é gerada e redistribuída a todos os amigos restantes via gift wrap, garantindo que o amigo removido perde acesso a posts futuros. Esta abordagem separa criptografia de conteúdo (simétrica, eficiente) de distribuição de chaves (assimétrica, por amigo), mantendo o protocolo leve enquanto habilita um recurso de privacidade frequentemente solicitado.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/1a451c1581888215ae5c311d36c8a7c7d9e5e81f1f4010de4afaf7fcbd553e90">NIP-DB: Interface de Banco de Dados de Eventos Nostr para Navegador&lt;/a>&lt;/strong> (&lt;a href="https://github.com/hzrd149/nostr-bucket/blob/master/nip.md">spec&lt;/a>) - Propõe uma interface padrão &lt;code>window.nostrdb&lt;/code> para extensões de navegador que fornecem armazenamento local de eventos Nostr. A API inclui métodos para adicionar eventos, consultar por ID ou filtro, contar correspondências e assinar atualizações. Aplicações web podem usar esta interface para ler de eventos cacheados localmente sem fazer requisições de relay, reduzindo largura de banda e latência. A extensão de navegador &lt;a href="https://github.com/hzrd149/nostr-bucket">nostr-bucket&lt;/a> de hzrd149 fornece uma implementação de referência, injetando a interface em todas as abas do navegador. Uma &lt;a href="https://github.com/hzrd149/window.nostrdb.js">biblioteca polyfill&lt;/a> complementar implementa a mesma API usando IndexedDB para ambientes sem a extensão.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/237667820943d1c8bbe7ab7732623ae51b337f177776ece439d4a8be84708eb7">TRUSTed Filters&lt;/a>&lt;/strong> - Uma suíte de cinco propostas relacionadas para curadoria descentralizada de conteúdo, construindo sobre o mesclado &lt;a href="https://github.com/nostr-protocol/nips/pull/1534">PR #1534 Trusted Assertions&lt;/a> de vitorpamplona. A especificação principal introduz eventos kind 17570 para declarar Preferências de Provedor de Confiança, permitindo que usuários especifiquem quais serviços eles confiam para filtragem e ranking de eventos. Provedores de confiança publicam assertions (kind 37571), estatísticas (kind 37572) e rankings (kind 37573) que clientes podem assinar. O sistema usa uma arquitetura de plugin com tags W/w para especificar tipos de filtro e transformações. Isso permite que operações computacionalmente caras como detecção de spam, scoring de reputação e ranking de conteúdo rodem em infraestrutura dedicada enquanto usuários mantêm controle sobre quais provedores eles confiam. A suíte inclui specs separadas para presets de filtro, rankings de usuário, eventos confiáveis e definições de plugin.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2194">NIP-9a: Notificações Push&lt;/a>&lt;/strong> - hodlbod propõe um padrão para notificações push baseadas em relay usando eventos kind 30390 de registro. Usuários criam um registro contendo filtros para eventos que eles querem receber e uma URL de callback de webhook. O registro é criptografado para a pubkey do relay (do campo &lt;code>self&lt;/code> do seu NIP-11). Quando eventos correspondentes ocorrem, relays fazem POST para o callback com o ID do evento (plaintext para deduplicação) e o evento em si (criptografado NIP-44 para o usuário). Esta arquitetura permite que relays enviem notificações push enquanto protegem conteúdo de evento de servidores push intermediários. O &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a> do Flotilla implementa este padrão.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/SigmaEnterprise/Catallax">Catallax&lt;/a>&lt;/strong> - Propõe um protocolo de trabalho contratual descentralizado com escrow usando eventos kind 33400. O sistema define três papéis: árbitros anunciam disponibilidade e termos, patrocinadores criam tarefas financiadas com Bitcoin em escrow, e agentes livres completam trabalho para reivindicar pagamento. Árbitros resolvem disputas quando necessário. O protocolo permite coordenação de trabalho freelance trustless onde fundos são bloqueados até que entregas sejam aceitas ou arbitragem conclua.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="deep-dive-de-nip-nip-47-nostr-wallet-connect">Deep Dive de NIP: NIP-47 (Nostr Wallet Connect)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> define Nostr Wallet Connect (NWC), um protocolo para controle remoto de carteira Lightning usando Nostr como camada de comunicação. Com a adição de suporte a hold invoice desta semana, NWC agora cobre toda a gama de operações Lightning.&lt;/p>
&lt;p>O protocolo funciona através de uma troca simples. Uma aplicação de carteira publica um evento &amp;ldquo;wallet info&amp;rdquo; (kind 13194) descrevendo suas capacidades. Aplicações cliente enviam requisições criptografadas (kind 23194) pedindo à carteira para executar operações como pagar invoices, criar invoices ou verificar saldos. A carteira responde com resultados criptografados (kind 23195).&lt;/p>
&lt;p>NWC usa criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> entre cliente e carteira, com um par de chaves dedicado para operações de carteira, mantendo-o separado da identidade principal do usuário. Esta separação significa que comprometer uma conexão NWC não expõe a identidade Nostr do usuário.&lt;/p>
&lt;p>&lt;strong>Métodos Suportados:&lt;/strong>&lt;/p>
&lt;p>A spec define métodos para operações Lightning principais: &lt;code>pay_invoice&lt;/code> envia pagamentos, &lt;code>make_invoice&lt;/code> gera invoices para recebimento, &lt;code>lookup_invoice&lt;/code> verifica status de pagamento, &lt;code>get_balance&lt;/code> retorna o saldo da carteira, e &lt;code>list_transactions&lt;/code> fornece histórico de pagamentos. O recém-mergeado &lt;code>pay_keysend&lt;/code> permite pagamentos sem invoices, e &lt;code>hold_invoice&lt;/code> suporta pagamentos condicionais.&lt;/p>
&lt;p>&lt;strong>Eventos de Exemplo:&lt;/strong>&lt;/p>
&lt;p>O serviço de carteira publica um evento info (kind 13194) anunciando suas 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;wallet 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;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;unix timestamp&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;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;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service 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>Um cliente envia uma requisição criptografada (kind 23194) para pagar um invoice:&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;client ephemeral pubkey from connection URI secret&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;NIP-44 encrypted: {\&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;wallet service 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;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;unix timestamp&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;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;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral 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>O serviço de carteira responde (kind 23195) com o resultado do pagamento:&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;wallet 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;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;NIP-44 encrypted: {\&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;client ephemeral 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;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;request event id&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;unix timestamp&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;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;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service 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>A tag &lt;code>e&lt;/code> na resposta referencia a requisição original, permitindo que clientes correspondam respostas às suas requisições.&lt;/p>
&lt;p>&lt;strong>Hold Invoices:&lt;/strong>&lt;/p>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/pull/1913">PR #1913&lt;/a> desta semana adicionou suporte a hold invoice, permitindo pagamentos estilo escrow. Diferente de invoices padrão onde o receptor imediatamente reivindica o pagamento liberando a preimage, hold invoices permitem que o receptor adie esta decisão. Quando um pagador envia para um hold invoice, fundos são bloqueados ao longo da rota de pagamento. O receptor então escolhe liquidar (liberar a preimage e reivindicar fundos) ou cancelar (rejeitar o pagamento, retornando fundos ao pagador). Se nenhuma ação ocorrer, o pagamento expira e fundos retornam automaticamente. O PR adiciona três métodos NWC: &lt;code>make_hold_invoice&lt;/code>, &lt;code>settle_hold_invoice&lt;/code> e &lt;code>cancel_hold_invoice&lt;/code>, mais uma notificação &lt;code>hold_invoice_accepted&lt;/code>. Este mecanismo alimenta aplicações como o escrow de compartilhamento de caronas do Ridestr e resolução de disputas de marketplace.&lt;/p>
&lt;p>&lt;strong>Implementações Atuais:&lt;/strong>&lt;/p>
&lt;p>Principais carteiras suportam NWC: Zeus, Alby e Primal (a partir do &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> desta semana) todos implementam suporte do lado da carteira. No lado do cliente, Damus, Amethyst e a maioria dos principais clientes Nostr podem conectar a carteiras NWC para zapping e pagamentos.&lt;/p>
&lt;p>O protocolo permite uma separação de responsabilidades: usuários podem rodar sua carteira em um dispositivo enquanto interagem com o Nostr de outro, com relays Nostr servindo como canal de comunicação. Esta arquitetura significa que clientes móveis não precisam manter fundos diretamente, melhorando a segurança ao manter infraestrutura de carteira separada de clientes sociais.&lt;/p>
&lt;p>&lt;strong>Considerações de Segurança:&lt;/strong>&lt;/p>
&lt;p>Conexões NWC devem ser tratadas como sensíveis. Enquanto a criptografia protege o conteúdo das mensagens, a pubkey da carteira e o segredo de conexão devem ser guardados. Aplicações devem permitir que usuários revoguem conexões e definam limites de gastos. O protocolo suporta restrições de capacidade, então carteiras podem limitar quais operações uma conexão específica pode executar.&lt;/p>
&lt;h2 id="deep-dive-de-nip-nip-59-gift-wrap">Deep Dive de NIP: NIP-59 (Gift Wrap)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> define um protocolo para encapsular qualquer evento Nostr em múltiplas camadas de criptografia, escondendo a identidade do remetente de relays e observadores. As propostas desta semana para notas apenas para amigos (NIP-FR) e notificações push (NIP-9a) ambas dependem de gift wrapping, tornando-o uma primitiva de privacidade fundamental que vale a pena entender.&lt;/p>
&lt;p>&lt;strong>As Três Camadas:&lt;/strong>&lt;/p>
&lt;p>Gift wrapping usa três estruturas aninhadas:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Rumor&lt;/strong> (evento não assinado): O conteúdo original como um evento Nostr sem assinatura. O rumor não pode ser enviado diretamente para relays porque relays rejeitam eventos não assinados.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Seal&lt;/strong> (kind 13): O rumor é criptografado usando &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> e colocado em um evento kind 13. O seal É assinado pela chave real do autor. Esta é a prova criptográfica de autoria.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Gift Wrap&lt;/strong> (kind 1059): O seal é criptografado e colocado em um evento kind 1059 assinado por um par de chaves aleatório de uso único. O gift wrap inclui uma tag &lt;code>p&lt;/code> para roteamento ao destinatário.&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Um Equívoco Comum: Negabilidade&lt;/strong>&lt;/p>
&lt;p>A spec menciona que rumors não assinados fornecem &amp;ldquo;negabilidade&amp;rdquo;, mas isso é enganoso. A camada seal É assinada pelo autor real. Quando o destinatário descriptografa o gift wrap e então o seal, eles têm prova criptográfica de quem enviou a mensagem. O destinatário poderia até construir uma prova de conhecimento zero revelando a identidade do remetente sem expor sua própria chave privada.&lt;/p>
&lt;p>O que gift wrap realmente fornece é &lt;strong>privacidade do remetente para observadores&lt;/strong>: relays e terceiros não podem determinar quem enviou a mensagem porque eles só veem o gift wrap assinado por uma chave aleatória. Mas o destinatário sempre sabe, e pode provar.&lt;/p>
&lt;p>&lt;strong>Eventos de Exemplo:&lt;/strong>&lt;/p>
&lt;p>Aqui está a estrutura completa de três camadas da spec (enviando &amp;ldquo;Você vai na festa hoje à noite?&amp;rdquo;):&lt;/p>
&lt;p>O rumor (não assinado, não pode ser publicado em 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;Are you going to the party tonight?&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>O seal (kind 13, assinado pelo autor real, contém rumor criptografado):&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>O gift wrap (kind 1059, assinado por chave efêmera aleatória, contém seal criptografado):&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>Note: a &lt;code>pubkey&lt;/code> do seal é o autor real (&lt;code>611df01...&lt;/code>), enquanto a &lt;code>pubkey&lt;/code> do gift wrap é uma chave de uso único aleatória (&lt;code>18b1a75...&lt;/code>). Relays só veem o gift wrap, então eles não podem atribuir a mensagem ao autor real.&lt;/p>
&lt;p>&lt;strong>O Que Cada Camada Protege:&lt;/strong>&lt;/p>
&lt;p>O rumor não é assinado e não pode ser publicado em relays diretamente. O seal é assinado pelo autor real e prova autoria para o destinatário. O gift wrap é assinado por uma chave de uso único aleatória, escondendo o autor real de relays e observadores. Apenas o destinatário pode descriptografar através de ambas as camadas para alcançar o conteúdo original e verificar a assinatura do autor no seal.&lt;/p>
&lt;p>&lt;strong>Aplicações Atuais:&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17 (Mensagens Diretas Privadas)&lt;/a> usa gift wrap para DMs criptografadas, substituindo o esquema NIP-04 mais antigo. O proposto NIP-FR (notas apenas para amigos) usa gift wrapping para distribuir ViewKeys aos amigos, que então descriptografam notas cifradas com essas chaves. NIP-9a (notificações push) criptografa payloads de notificação usando princípios de gift wrap.&lt;/p>
&lt;p>&lt;strong>Proteção de Metadados:&lt;/strong>&lt;/p>
&lt;p>Timestamps devem ser randomizados para frustrar análise de timing. Relays devem exigir AUTH antes de servir eventos kind 1059 e só servi-los para o destinatário marcado. Ao enviar para múltiplos destinatários, crie gift wraps separados para cada um.&lt;/p>
&lt;hr>
&lt;p>É isso para esta semana. Construindo algo? Tem notícias para compartilhar? Quer que cubramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via DM NIP-17&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #7</title><link>https://nostrcompass.org/pt/newsletters/2026-01-28-newsletter/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-01-28-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ridestr traz compartilhamento de caronas descentralizado para o Nostr com pagamentos &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> e compartilhamento de localização criptografado. Pomade introduz recuperação baseada em e-mail para signatários multisig. Damus lança &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> para sincronização confiável de DMs. O aplicativo desktop do Amethyst adiciona busca, favoritos e zaps. Amber v4.1.1 exibe pontuações de confiança de relays. Marmot faz merge do MIP-03 e constrói um aplicativo de chat de referência em TypeScript. diVine adiciona autenticação por QR via &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e suporte a menções. Novas propostas de NIP abordam gerenciamento de comunidades, sincronização baseada em sequência e armazenamento de arquivos criptografados. Também olhamos para cinco anos de janeiros do Nostr, traçando a evolução do protocolo desde um punhado de adotantes iniciais em 2021 até o lançamento explosivo do Damus na App Store em 2023 e o ecossistema de clientes amadurecido de 2025.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ridestr traz compartilhamento de caronas descentralizado para o Nostr com pagamentos &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> e compartilhamento de localização criptografado. Pomade introduz recuperação baseada em e-mail para signatários multisig. Damus lança &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> para sincronização confiável de DMs. O aplicativo desktop do Amethyst adiciona busca, favoritos e zaps. Amber v4.1.1 exibe pontuações de confiança de relays. Marmot faz merge do MIP-03 e constrói um aplicativo de chat de referência em TypeScript. diVine adiciona autenticação por QR via &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e suporte a menções. Novas propostas de NIP abordam gerenciamento de comunidades, sincronização baseada em sequência e armazenamento de arquivos criptografados. Também olhamos para cinco anos de janeiros do Nostr, traçando a evolução do protocolo desde um punhado de adotantes iniciais em 2021 até o lançamento explosivo do Damus na App Store em 2023 e o ecossistema de clientes amadurecido de 2025.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="ridestr-traz-compartilhamento-de-caronas-descentralizado-para-o-nostr">Ridestr Traz Compartilhamento de Caronas Descentralizado para o Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> está desenvolvendo um aplicativo de compartilhamento de caronas peer-to-peer construído inteiramente no Nostr, permitindo transações diretas entre motoristas e passageiros com pagamentos em Bitcoin e &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a>. O protocolo usa kinds de evento personalizados (30173, 3173-3175, 30180/30181) para coordenar corridas enquanto mantém a privacidade através de divulgação progressiva de localização e criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>.&lt;/p>
&lt;p>O sistema funciona através de um fluxo cuidadosamente coreografado: motoristas transmitem disponibilidade usando localizações codificadas em geohash (~5km de precisão) via eventos kind 30173, passageiros solicitam corridas com estimativas de tarifa através de kind 3173, e pagamentos são garantidos usando tokens de escrow HTLC antes do início da corrida. A privacidade da localização é preservada através de divulgação progressiva, onde detalhes de embarque só são revelados quando os motoristas chegam e destinos são compartilhados após verificação de PIN. Toda comunicação entre as partes usa criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> para privacidade.&lt;/p>
&lt;p>Ridestr implementa segurança de pagamento através de escrow HTLC com assinaturas P2PK. Quando um passageiro aceita a oferta de um motorista, ele bloqueia tokens &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> com um hash de pagamento que apenas o motorista pode reivindicar após a conclusão da corrida. O protocolo atualmente opera com arquitetura de mint único, exigindo que passageiros e motoristas usem o mesmo mint &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a>. A implementação Android baseada em Kotlin do projeto lida com verificação de provas e recuperação de provas obsoletas através de verificações de estado NUT-07.&lt;/p>
&lt;p>Ridestr enfrenta desafios que a maioria dos aplicativos Nostr evita: coordenação de localização em tempo real, escrow de pagamento com resolução de disputas e sistemas de reputação para interações no mundo físico. O projeto está em beta e demonstra que o modelo de eventos do Nostr pode suportar marketplaces de serviços peer-to-peer, não apenas compartilhamento de conteúdo.&lt;/p>
&lt;h3 id="pomade-lança-sistema-de-recuperação-alpha-para-signatários-multisig">Pomade Lança Sistema de Recuperação Alpha para Signatários Multisig&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a>, desenvolvido por hodlbod, se baseia no ecossistema &lt;a href="https://github.com/FROSTR-ORG">FROSTR&lt;/a> existente para fornecer um serviço de assinatura de limiar focado em recuperação. Usando assinaturas &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> (Flexible Round-Optimized Schnorr Threshold) através da biblioteca @frostr/bifrost, Pomade adiciona fluxos de recuperação baseados em e-mail em cima da criptografia de limiar. O sistema fragmenta a chave secreta do usuário usando Shamir Secret Sharing, distribuindo fragmentos entre múltiplos signatários independentes com um limiar configurável (2-de-3, 3-de-5, etc.).&lt;/p>
&lt;p>O protocolo opera inteiramente sobre o Nostr usando um único kind de evento (28350) com payloads criptografados &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>. Ao assinar, o cliente solicita assinaturas parciais de pelo menos &lt;code>threshold&lt;/code> signatários, então agrega essas em uma assinatura Schnorr válida. Para criptografia, signatários colaboram para derivar segredos compartilhados via ECDH sem que nenhuma parte aprenda a chave completa.&lt;/p>
&lt;p>A recuperação funciona através de dois métodos de autenticação: baseado em senha (usando argon2id com a pubkey do signatário como salt) ou OTP por e-mail. Para prevenir ataques MITM durante recuperação por OTP, cada signatário gera seu próprio código de verificação com um prefixo fornecido pelo cliente, exigindo que usuários se autentiquem independentemente com cada signatário. O protocolo requer prova de trabalho em eventos de registro (20+ bits por &lt;a href="https://nostrcompass.org/pt/topics/nip-13/">NIP-13&lt;/a>) para prevenir spam.&lt;/p>
&lt;p>O modelo de confiança é explícito: se &lt;code>threshold&lt;/code> signatários conspirarem, eles podem roubar a chave. Provedores de e-mail são totalmente confiáveis já que podem interceptar OTPs. Usuários não podem recuperar independentemente sua chave secreta completa; fazer isso requer cooperação de &lt;code>threshold&lt;/code> signatários. O protocolo é projetado para integrar novos usuários não familiarizados com gerenciamento de chaves, com a recomendação explícita de que usuários migrem para auto-custódia uma vez confortáveis. Pomade alerta sobre potencial &amp;ldquo;perda de chave, roubo, negação de serviço ou vazamento de metadados&amp;rdquo; dado seu status alpha não auditado.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="damus-lança-negentropy-para-sincronização-confiável-de-dms">Damus Lança Negentropy para Sincronização Confiável de DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/tree/v1.13">Damus v1.13&lt;/a> lança a implementação de negentropy &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/#damus-ios-client---open-prs">que previsualizamos como PR aberto na semana passada&lt;/a>. &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> adiciona suporte base de &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> à camada de rede, habilitando reconciliação de conjuntos com relays que suportam o protocolo. Um &lt;a href="https://github.com/damus-io/damus/pull/3547">PR #3547&lt;/a> complementar adiciona sincronização de DM por pull-to-refresh que usa negentropy para recuperar mensagens perdidas quando assinaturas REQ padrão falham.&lt;/p>
&lt;p>A implementação segue uma abordagem conservadora: o carregamento normal de DM continua inalterado, com &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> disponível como mecanismo de recuperação quando usuários atualizam manualmente. Testes automatizados demonstram a correção gerando uma DM com timestamp antigo que consultas padrão perderiam, então usando sincronização &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> para recuperá-la com sucesso. Embora o suporte a &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> requeira relays compatíveis, a implementação lida graciosamente com ambientes de relay mistos usando o protocolo onde disponível.&lt;/p>
&lt;h3 id="amber-v411---pontuações-de-confiança-de-relay">Amber v4.1.1 - Pontuações de Confiança de Relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.1">Amber v4.1.1&lt;/a> lança exibição de pontuação de confiança de relay (&lt;a href="https://github.com/greenart7c3/Amber/pull/289">PR #289&lt;/a>), implementando os conceitos de avaliação de relay discutidos na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/#nip-updates">cobertura de Trusted Relay Assertions da semana passada&lt;/a>. Pontuações de confiança agora aparecem na página de Relays e para solicitações de conexão NostrConnect, ajudando usuários a avaliar a confiabilidade do relay antes de autorizar conexões. O lançamento também inclui uma UI redesenhada de login/eventos/permissões e suporte para o método &lt;code>switch_relays&lt;/code>. Melhorias de desempenho fazem cache de operações de keystore, abordando relatos de tempos de carregamento de 20+ segundos em dispositivos mais antigos.&lt;/p>
&lt;h3 id="nak-v0182---integração-mcp">nak v0.18.2 - Integração 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> adiciona suporte ao &lt;a href="https://nostrify.dev/mcp">Model Context Protocol&lt;/a> via &lt;code>nak mcp&lt;/code>, permitindo que agentes de IA busquem pessoas no Nostr, publiquem notas, mencionem usuários e leiam conteúdo usando o modelo outbox. O lançamento também introduz um &lt;a href="https://github.com/fiatjaf/nak/blob/master/install.sh">instalador de uma linha&lt;/a> (&lt;code>curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh&lt;/code>) que baixa binários pré-compilados, eliminando o requisito de toolchain Go para usuários finais. O modo Bunker agora suporta Unix sockets e &lt;code>switch_relays&lt;/code>.&lt;/p>
&lt;h3 id="zeus-v0122-beta---correções-nwc">Zeus v0.12.2 Beta - Correções NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/releases">Zeus v0.12.2-beta1&lt;/a> lança múltiplas correções NWC abordando problemas cobertos na &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/#zeus-lightning-wallet-with-nostr-wallet-connect">cobertura do Zeus da semana passada&lt;/a>.&lt;/p>
&lt;h2 id="atualizações-de-projetos">Atualizações de Projetos&lt;/h2>
&lt;h3 id="amethyst-desktop---fase-2a-lançada">Amethyst Desktop - Fase 2A Lançada&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> lançou a &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1676">Fase 2A de seu aplicativo desktop&lt;/a>, adicionando Busca, Favoritos, Zaps, visualizações de Thread e conteúdo de formato longo (Reads) à experiência desktop. Um &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1683">PR #1683&lt;/a> complementar adiciona feedback transparente de transmissão de eventos para que usuários agora vejam status em tempo real por relay enquanto seus eventos se propagam pela rede, facilitando o diagnóstico de problemas de conectividade.&lt;/p>
&lt;h3 id="progresso-do-notedeck-aplicativo-de-calendário-e-polimento-de-ux">Progresso do Notedeck: Aplicativo de Calendário e Polimento de UX&lt;/h3>
&lt;p>O cliente desktop &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> da equipe Damus fez merge do comportamento de auto-ocultar barra de ferramentas (&lt;a href="https://github.com/damus-io/notedeck/pull/1268">PR #1268&lt;/a>) que responde à velocidade de rolagem para mais espaço de tela em visualizações móveis. Um &lt;a href="https://github.com/damus-io/notedeck/pull/1271">draft PR #1271&lt;/a> adiciona um aplicativo de Calendário &lt;a href="https://nostrcompass.org/pt/topics/nip-52/">NIP-52&lt;/a> completo com visualizações de mês/semana/dia/agenda, suporte a RSVP e comentários &lt;a href="https://nostrcompass.org/pt/topics/nip-22/">NIP-22&lt;/a> em eventos de calendário, atualmente com feature flag para testes.&lt;/p>
&lt;h3 id="jumble-adiciona-modo-comunidade">Jumble Adiciona Modo Comunidade&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>, o cliente web focado em relay, adicionou &lt;a href="https://github.com/CodyTseng/jumble/pull/738">modo comunidade&lt;/a> e suporte para &lt;a href="https://github.com/CodyTseng/jumble/pull/736">presets de conjunto de relays via variáveis de ambiente&lt;/a>, facilitando o deploy de instâncias temáticas como &lt;a href="https://nostr.moe/">nostr.moe&lt;/a>.&lt;/p>
&lt;h3 id="dashboard-de-pedidos-do-shopstr">Dashboard de Pedidos do Shopstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> substituiu seu gerenciamento de pedidos baseado em chat por um &lt;a href="https://github.com/shopstr-eng/shopstr/pull/219">Dashboard de Pedidos&lt;/a> dedicado. A nova interface fornece uma visualização centralizada para comerciantes rastrearem status de pedidos, marcarem mensagens como lidas e gerenciarem fulfillment sem rolar através de threads de chat. A atualização descontinua cache IndexedDB em favor de APIs de status de pedido server-side e revisa como DMs de pedido são tagueadas para melhor filtragem.&lt;/p>
&lt;h3 id="formstr-adiciona-perguntas-de-grade">Formstr Adiciona Perguntas de Grade&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>, o aplicativo de formulários nativo do Nostr, adicionou &lt;a href="https://github.com/abh3po/nostr-forms/pull/419">perguntas de grade&lt;/a> e &lt;a href="https://github.com/abh3po/nostr-forms/pull/410">reescreveu seu SDK&lt;/a> com suporte a embed. Uma [correção para signatários não-&lt;a href="https://nostrcompass.org/pt/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>) resolveu problemas para usuários com bunker ou signatários locais tentando enviar formulários com sua identidade.&lt;/p>
&lt;h3 id="nostr-tools-atualiza-dependências-de-criptografia">nostr-tools Atualiza Dependências de Criptografia&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>, a biblioteca JavaScript principal, &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/520">atualizou para @noble/curves v2.0.1&lt;/a>, abordando mudanças de API quebradas em 27 arquivos e adotando as últimas bibliotecas noble auditadas. fiatjaf também adicionou suporte &lt;code>switch_relays&lt;/code> ao &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>, permitindo que clientes bunker mudem dinamicamente conexões de relay.&lt;/p>
&lt;h3 id="zeus-trabalhando-em-reviews-de-mint-nip-87">Zeus Trabalhando em Reviews de Mint NIP-87&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> tem um [PR aberto para reviews de mint &lt;a href="https://nostrcompass.org/pt/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>, permitindo que usuários descubram e avaliem mints &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> filtrados por follows do Nostr. Reviews incluem classificações por estrelas e podem ser enviadas anonimamente ou com a nsec do usuário.&lt;/p>
&lt;h3 id="camelus-lança-suporte-completo-a-dm">Camelus Lança Suporte Completo a DM&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>, um cliente Android baseado em Flutter construído com Dart NDK para desempenho móvel eficiente em bateria, adicionou mensagens diretas abrangentes com 20+ commits esta semana. A atualização inclui categorias de chat, datas de mensagens, UI de envio otimista, funcionalidade de nota para si mesmo e tratamento adequado de relay de DM.&lt;/p>
&lt;h3 id="atualizações-do-protocolo-marmot">Atualizações do Protocolo Marmot&lt;/h3>
&lt;p>A resolução determinística de commit MIP-03 &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/#marmot-protocol-white-noise-encrypted-group-chat-library">que cobrimos como PR aberto na semana passada&lt;/a> agora foi mergeada. &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">MDK PR #152&lt;/a> garante que todos os chats de grupo baseados em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> convirjam para o mesmo estado quando múltiplos commits válidos chegam para a mesma epoch.&lt;/p>
&lt;p>Um &lt;a href="https://github.com/marmot-protocol/marmot/pull/28">spec PR #28&lt;/a> complementar adiciona requisitos de ciclo de vida de init_key abordando lacunas de auditorias de implementação: material de chave privada de mensagens Welcome deve ser excluído com segurança após processamento (zeroização, limpeza de armazenamento), e novos membros devem realizar auto-atualizações dentro de 24 horas para forward secrecy.&lt;/p>
&lt;p>O SDK TypeScript (&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>) está construindo um aplicativo de chat de referência. &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/37">PR #37&lt;/a> adiciona criação/listagem de grupos, gerenciamento de key package com fluxos de publicar/transmitir/excluir e convites por QR code. Um &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR aberto #38&lt;/a> por hzrd149 implementa persistência de histórico de mensagens com paginação. O backend whitenoise-rs fez merge de 15 PRs esta semana incluindo suporte multi-idioma (&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/455">PR #455&lt;/a>) e referências de mídia 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-adiciona-recursos-de-integração-nostr">diVine Adiciona Recursos de Integração Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>, o aplicativo de vídeos curtos, continua rápida integração com Nostr.&lt;/p>
&lt;p>PRs abertos incluem autenticação por QR code &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1019">PR #1019&lt;/a>) e mensagens diretas criptografadas &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (&lt;a href="https://github.com/divinevideo/divine-mobile/pull/834">PR #834&lt;/a>). A atividade desta semana focou em &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1098">suporte a menções&lt;/a> convertendo URIs &lt;code>nostr:&lt;/code> e @menções em links de perfil clicáveis, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1097">fallbacks de avatar Classic Viners&lt;/a> usando perfis Nostr, e ferramentas de edição de vídeo incluindo &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1056">desenho&lt;/a>, &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1053">filtros&lt;/a> e &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1050">stickers&lt;/a>.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mesclados:&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> - A proposta para padronizar pontuação de confiança de relay &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/#nip-updates">que cobrimos na semana passada&lt;/a> foi mesclada. A especificação define eventos kind 30385 para asserções de confiança de relay com pontuação em confiabilidade, qualidade e acessibilidade. O debate que levou à mesclagem centrou-se em se pontuações de confiança devem ser &amp;ldquo;globais&amp;rdquo; (computadas uma vez para todos os usuários) ou &amp;ldquo;personalizadas&amp;rdquo; (relativas ao grafo social de cada observador). Algoritmos estilo PageRank como o &lt;a href="https://trust.nostr.band/">Trust Rank do nostr.band&lt;/a> e &lt;a href="https://github.com/Pretty-Good-Freedom-Tech/graperank-nodejs">GrapeRank&lt;/a> resistem a ataques sybil dividindo qualquer rank passado através de contas falsas pelo tamanho da fazenda de bots.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Communikeys&lt;/strong> - Uma &lt;a href="https://nostrhub.io">proposta abrangente&lt;/a> para gerenciamento de comunidades que usa npubs existentes como identificadores de comunidade em vez de abordagens baseadas em relay. Qualquer npub pode se tornar uma comunidade publicando um evento kind 10222; publicações visam comunidades via eventos kind 30222. Controle de acesso usa badges &lt;a href="https://nostrcompass.org/pt/topics/nip-58/">NIP-58&lt;/a>, permitindo gerenciamento de membros delegado com armazenamento cold para chaves de comunidade.&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> - Um rascunho propondo sincronização de eventos baseada em sequência como alternativa a filtros &lt;code>since&lt;/code> baseados em timestamp. O problema: sincronização Nostr padrão usando timestamps &lt;code>since&lt;/code> pode perder eventos quando múltiplos eventos compartilham o mesmo timestamp de precisão de segundo, relógios de cliente e relay divergem, ou checkpointing é impreciso. NIP-CF resolve isso fazendo relays atribuírem números de sequência monotonicamente crescentes a eventos armazenados, fornecendo ordenação total estrita. Clientes solicitam mudanças desde um número de sequência específico e recebem eventos em ordem garantida, com checkpointing preciso que nunca perde eventos. A proposta também suporta modo ao vivo/contínuo onde assinaturas permanecem abertas após sincronização inicial para atualizações em tempo 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> - Um protocolo definindo kinds 30800 (arquivos criptografados), 30801 (índices de vault) e 30802 (documentos compartilhados) para sincronizar conteúdo criptografado entre dispositivos usando relays Nostr. O protocolo permite que aplicativos de anotações local-first forneçam sincronização criptografada de ponta a ponta sem servidores centralizados. Conteúdos de arquivo, caminhos, nomes e estrutura de pastas são todos criptografados usando auto-criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, então relays armazenam blobs que não podem ler. Anexos binários como imagens usam servidores &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> com criptografia client-side. Kind 30802 permite compartilhamento de documentos entre usuários criptografando para a chave pública do destinatário.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="cinco-anos-de-janeiros-do-nostr">Cinco Anos de Janeiros do Nostr&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-31-newsletter/#december-recap-five-years-of-nostr-decembers">O newsletter do mês passado&lt;/a> traçou os marcos de dezembro do Nostr desde o primeiro lançamento de cliente de fiatjaf até a doação catalítica de Jack Dorsey. Esta retrospectiva mapeia o que aconteceu em cada janeiro de 2021 até 2025, focando em desenvolvimentos técnicos verificados.&lt;/p>
&lt;h3 id="janeiro-de-2021-desenvolvimento-inicial">Janeiro de 2021: Desenvolvimento Inicial&lt;/h3>
&lt;p>O terceiro mês do Nostr viu desenvolvimento contínuo no Branle, o cliente Vue.js de fiatjaf que havia lançado em dezembro de 2020. Um pequeno grupo de adotantes iniciais, provavelmente menos de 15 pessoas, se coordenava através do grupo Telegram &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a> (criado em 16 de novembro de 2020), testando o protocolo em um ou dois relays experimentais. O cliente de linha de comando noscl fornecia interação baseada em terminal.&lt;/p>
&lt;p>A fundação técnica já estava definida: usuários identificados por chaves públicas secp256k1, posts assinados criptograficamente com assinaturas Schnorr, e relays servindo como armazenamento burro que não se comunicam entre si. Isso era deliberadamente criptografia nativa do Bitcoin, uma escolha de design que moldaria padrões de adoção anos depois.&lt;/p>
&lt;h3 id="janeiro-de-2022-descoberta-por-desenvolvedores">Janeiro de 2022: Descoberta por Desenvolvedores&lt;/h3>
&lt;p>Janeiro de 2022 abriu com o Nostr ainda agitado por sua &lt;a href="https://news.ycombinator.com/item?id=29749061">primeira aparição no Hacker News&lt;/a> (31 de dezembro de 2021), que gerou 110 pontos e 138 comentários. Na época daquele post, apenas cerca de sete relays alimentavam toda a rede, com comentaristas notando que &amp;ldquo;spam ainda não é um problema porque nostr é super novo e ninguém usa ainda.&amp;rdquo; Robert C. Martin (&amp;ldquo;Uncle Bob&amp;rdquo;) havia endossado o Nostr como potencialmente &amp;ldquo;a solução final para comunicação social.&amp;rdquo; A discussão continuou em janeiro, com desenvolvedores debatendo arquitetura de relay versus P2P verdadeiro, resistência à censura versus moderação, e se a simplicidade poderia escalar.&lt;/p>
&lt;p>O post do HN provocou uma onda de novas implementações. O próprio Uncle Bob começou &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>, um cliente desktop Clojure, em 18 de janeiro. A biblioteca &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> de fiatjaf (criada em janeiro de 2021) e o cliente de linha de comando &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a> forneciam ferramentas Go, enquanto &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> oferecia suporte JavaScript. Até dezembro de 2022, aproximadamente 800 perfis tinham bios. Branle permaneceu o cliente web principal, recebendo atualizações incluindo importação de chave privada e suporte multi-relay. Desafios técnicos eram evidentes: chaves hex de 64 caracteres se mostraram pouco intuitivas, atrasos de mensagens frustravam usuários, e a comunidade questionava se a arquitetura poderia lidar com tráfego em escala Twitter.&lt;/p>
&lt;h3 id="janeiro-de-2023-a-explosão">Janeiro de 2023: A Explosão&lt;/h3>
&lt;p>Janeiro de 2023 transformou o Nostr de experimento em movimento. Damus, o cliente iOS de William Casarin (jb55), lutou contra o processo de aprovação da App Store da Apple. Rejeitado em 1º de janeiro, rejeitado novamente em 26 de janeiro, foi finalmente &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">aprovado em 31 de janeiro&lt;/a>. Essa aprovação desencadeou uma cascata: Damus imediatamente alcançou o #10 em Redes Sociais nos EUA. 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">chamou isso de&lt;/a> &amp;ldquo;um marco para protocolos abertos.&amp;rdquo;&lt;/p>
&lt;p>Oito dias antes, em 23 de janeiro, &lt;a href="https://x.com/Snowden/status/1617623779626352640">Edward Snowden anunciou&lt;/a> sua presença no Nostr: &amp;ldquo;Uma das coisas legais sobre o Nostr&amp;hellip; além da resistência à censura, é que você não está limitado a 280 caracteres.&amp;rdquo; Seu endosso de um denunciante da NSA carregava peso em círculos conscientes de privacidade, e usuários imediatamente começaram a enviar zaps de sats via Lightning.&lt;/p>
&lt;p>Clientes web correram para integrar o influxo. &lt;a href="https://github.com/v0l/snort">Snort&lt;/a>, criado por kieran em dezembro de 2022, emergiu como um cliente React cheio de recursos; em 13 de janeiro, Snort integrou registro NIP-05 via API Nostr Plebs, permitindo que novos usuários reivindicassem identidades legíveis por humanos durante o onboarding. &lt;a href="https://iris.to">Iris&lt;/a>, desenvolvido em tempo integral por Martti Malmi (um contribuidor inicial do Bitcoin que recebeu a segunda transação de Bitcoin de Satoshi), oferecia interfaces web e móvel com identidades NIP-05 gratuitas em iris.to. &lt;a href="https://github.com/monlovesmango/astral">Astral&lt;/a>, construído por monlovesmango com Quasar (Vue.js) como fork do Branle, focava em gerenciamento de relay com seu recurso de agrupamento de relay que permitia usuários organizarem relays em conjuntos para postar e filtrar. Betas TestFlight para clientes iOS lotavam em horas, e Amethyst dominava o Android.&lt;/p>
&lt;p>A infraestrutura lutou para acompanhar. Todos os relays eram operados por entusiastas pagando do próprio bolso. Relays pagos usando micropagamentos Lightning criavam filtragem natural de spam mas introduziam fricção de acesso. &lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Damus foi removido da App Store da China&lt;/a> apenas dois dias após aprovação, supostamente a pedido do principal órgão de vigilância da internet da China.&lt;/p>
&lt;h3 id="janeiro-de-2024-endurecimento-do-protocolo">Janeiro de 2024: Endurecimento do Protocolo&lt;/h3>
&lt;p>Janeiro de 2024 focou em padronização de protocolo e construção de comunidade. &lt;a href="https://www.nostrphx.com/events">Nostr PHX&lt;/a> começou o ano com um encontro em 5 de janeiro em Phoenix, reunindo cypherpunks locais. Este foi o primeiro de muitos eventos comunitários naquele ano incluindo BTC Prague (junho), Nostriga em Riga (agosto) e Nostrasia.&lt;/p>
&lt;p>O desenvolvimento de protocolo mais significativo foi &lt;a href="https://github.com/nostr-protocol/nips/pull/716">NIP-59 (Gift Wrap)&lt;/a> sendo mergeado em 29 de janeiro, fornecendo proteção de metadados para comunicações criptografadas. Gift Wrap se baseia no &lt;a href="https://github.com/paulmillr/nip44">padrão de criptografia NIP-44&lt;/a> (que havia sido &lt;a href="https://cure53.de/audit-report_nip44-implementations.pdf">auditado pela Cure53&lt;/a> em dezembro de 2023) para esconder a identidade do remetente dos relays. O protocolo envolve mensagens criptografadas dentro de um evento externo assinado por um par de chaves aleatório de uso único. Relays veem apenas a pubkey descartável, enquanto a identidade real do remetente está enterrada no payload criptografado que apenas o destinatário pode descriptografar. Isso impede que operadores de relay e observadores de rede saibam quem está enviando mensagens para quem. Timestamps também podem ser randomizados para derrotar análise de timing.&lt;/p>
&lt;p>O ecossistema expandiu além de mídia social. &lt;a href="https://plebeian.market">Plebeian Market&lt;/a> tornou-se totalmente nativo do Nostr com conformidade &lt;a href="https://nostrcompass.org/pt/topics/nip-15/">NIP-15&lt;/a>, permitindo carrinhos de compras cross-stall e um navegador de stalls para descobrir comerciantes. &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> emergiu como um marketplace sem permissão facilitando comércio Bitcoin. &lt;a href="https://zap.stream/">Zap.stream&lt;/a>, construído por kieran, trouxe streaming ao vivo para o Nostr com pagamentos Lightning a 21 sats/minuto. Ferramentas de desenvolvimento amadureceram com &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> fornecendo abstrações TypeScript e &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> oferecendo bindings Rust. &lt;a href="https://blog.zeusln.com/new-release-zeus-v0-8-1/">Zeus v0.8.1&lt;/a> lançou com importação de contatos Nostr e LND persistente, preparando o terreno para integração Nostr Wallet Connect em lançamentos posteriores.&lt;/p>
&lt;p>No entanto, a sustentabilidade da infraestrutura &lt;a href="https://arxiv.org/abs/2402.05709">permanecia desafiadora&lt;/a>. Pesquisa acadêmica deste período encontrou que 95% dos relays lutavam para cobrir custos operacionais, com 20% experimentando downtime significativo. A taxa de admissão para relays pagos era em média menos de 1.000 sats (~$0,45), insuficiente para sustentar operações.&lt;/p>
&lt;p>&lt;em>Uma nota sobre golpes: O &amp;ldquo;Nostr Assets Protocol&amp;rdquo; e o token &amp;ldquo;$NOSTR&amp;rdquo; associado que lançaram por volta desta época &lt;a href="https://www.aicoin.com/en/article/377704">foram publicamente denunciados por fiatjaf&lt;/a> como &amp;ldquo;100% fraudulentos&amp;rdquo; e &amp;ldquo;um golpe de afinidade&amp;rdquo; sem conexão com o protocolo Nostr real.&lt;/em>&lt;/p>
&lt;h3 id="janeiro-de-2025-maturação-de-clientes">Janeiro de 2025: Maturação de Clientes&lt;/h3>
&lt;p>Janeiro de 2025 viu desenvolvimento contínuo de clientes em todo o ecossistema. &lt;a href="https://www.nobsbitcoin.com/nostur-v1-17-0/">Nostur 1.17.0&lt;/a> lançou em 13 de janeiro com sincronização cross-device para estados de leitura, suporte a login multi-sig &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a>, e desempenho otimizado de banco de dados local. Amethyst continuou sua transição para o modelo outbox, compilando automaticamente conjuntos de relay baseados em listas de follows em vez de exigir configuração manual.&lt;/p>
&lt;p>Principais clientes começaram a se afastar do &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> para mensagens diretas, migrando para &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> e o proposto &lt;a href="https://nostrcompass.org/pt/topics/nip-104/">NIP-104&lt;/a> para criptografia aprimorada e proteção de metadados. O modelo Gossip (comunicação outbox/inbox) ganhou adoção conforme o ecossistema convergiu para padrões de uso de relay mais eficientes. Observadores da indústria previram que este seria o ano em que o Nostr transicionaria de protocolo de nicho para reconhecimento mainstream, com uma potencial migração de plataforma de alto perfil que poderia dobrar a atividade diária.&lt;/p>
&lt;h3 id="janeiro-de-2026-segurança-e-infraestrutura-de-assinatura">Janeiro de 2026: Segurança e Infraestrutura de Assinatura&lt;/h3>
&lt;p>Janeiro de 2026 trouxe avanços significativos em segurança e infraestrutura de assinatura. &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">Primal Android 2.6.18&lt;/a> lançou assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e suporte a signatário local &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, juntando-se a Amber e Aegis como um hub de assinatura completo para outros aplicativos Android. &lt;a href="https://github.com/permissionlesstech/bitchat/pulls">Bitchat completou uma auditoria de segurança da Cure53&lt;/a>, a mesma firma que auditou Signal e NIP-44, com 17+ PRs corrigindo descobertas críticas incluindo limpeza de segredo DH e problemas de thread safety. Tanto Bitchat quanto Damus migraram de C Tor para Rust Arti para confiabilidade e segurança de memória aprimoradas.&lt;/p>
&lt;p>O trabalho de protocolo continuou com &lt;a href="https://github.com/nostr-protocol/nips/pull/1669">NIP-71&lt;/a> (eventos de vídeo endereçáveis) sendo mergeado e um NIP de criptografia pós-quântica abrindo discussão sobre proteger o Nostr contra ataques quânticos. O rascunho Trusted Relay Assertions propôs padronizar pontuação de confiança de relay através de atestações assinadas. O &lt;a href="https://github.com/marmot-protocol/mdk">Protocolo Marmot&lt;/a> endureceu suas mensagens criptografadas baseadas em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a> com 18 PRs mergeados abordando descobertas de auditoria.&lt;/p>
&lt;p>Aplicações do mundo real expandiram com &lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> desenvolvendo compartilhamento de caronas descentralizado usando escrow &lt;a href="https://nostrcompass.org/pt/topics/cashu/">Cashu&lt;/a> e criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, e &lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a> adicionando fluxos de recuperação baseados em e-mail à assinatura de limiar &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a>. Damus lançou &lt;a href="https://nostrcompass.org/pt/topics/negentropy/">negentropy&lt;/a> para sincronização confiável de DM, enquanto o aplicativo desktop do Amethyst alcançou a Fase 2A com busca, favoritos e zaps.&lt;/p>
&lt;h3 id="olhando-adiante">Olhando Adiante&lt;/h3>
&lt;p>Seis anos de janeiros revelam a evolução do Nostr desde desenvolvimento inicial (2021) até descoberta pública (2022) até crescimento explosivo (2023) até endurecimento de protocolo (2024) até maturação de clientes (2025) até infraestrutura de segurança (2026). O padrão é familiar para qualquer um que assistiu protocolos abertos crescerem: anos de construção silenciosa, uma explosão repentina quando as condições se alinham, então o trabalho mais longo de tornar tudo confiável. O que começou com sete relays e um thread no Hacker News agora é infraestrutura auditada com aplicações reais. A questão para 2027: quando alguém chamar uma carona, enviar uma mensagem criptografada, ou recuperar uma chave perdida usando Nostr, eles sequer saberão que estão usando?&lt;/p>
&lt;hr>
&lt;p>É isso para esta semana. Construindo algo? Tem notícias para compartilhar? Quer que cubramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via DM NIP-17&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #6</title><link>https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-01-21-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat substitui C Tor pela implementação Rust Arti para melhor confiabilidade e desempenho. nostrdb-rs ganha consultas fold streaming que habilitam operações de banco de dados com alocação zero. Listr recebe uma grande refatoração com migração para NDK 3 beta e manutenção assistida por IA após um ano de inatividade. Zeus entrega 17 PRs mesclados focados em correções de &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect para controle remoto do Lightning) e melhorias no Cashu, enquanto Primal Android adiciona fluxos de backup de carteira e suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a> (dimensões de mídia para proporções adequadas). Um novo rascunho de NIP propõe &lt;a href="https://nostrcompass.org/pt/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a> para pontuação padronizada de confiança de relays.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal sobre Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Bitchat substitui C Tor pela implementação Rust Arti para melhor confiabilidade e desempenho. nostrdb-rs ganha consultas fold streaming que habilitam operações de banco de dados com alocação zero. Listr recebe uma grande refatoração com migração para NDK 3 beta e manutenção assistida por IA após um ano de inatividade. Zeus entrega 17 PRs mesclados focados em correções de &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> (Nostr Wallet Connect para controle remoto do Lightning) e melhorias no Cashu, enquanto Primal Android adiciona fluxos de backup de carteira e suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a> (dimensões de mídia para proporções adequadas). Um novo rascunho de NIP propõe &lt;a href="https://nostrcompass.org/pt/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a> para pontuação padronizada de confiança de relays.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="bitchat-migra-para-rust-arti-para-suporte-tor">Bitchat Migra para Rust Arti para Suporte Tor&lt;/h3>
&lt;p>Bitchat migrou do C Tor para &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>, a implementação Rust do protocolo Tor. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/958">PR #958&lt;/a> remove a dependência do C Tor e integra Arti, trazendo garantias de segurança de memória e confiabilidade aprimorada. A mudança elimina tentativas de despertar em modo dormente que causavam reinicializações de serviço em primeiro plano, um problema persistente com a implementação em C.&lt;/p>
&lt;p>&lt;strong>O que isso significa para os usuários:&lt;/strong> Mensagens criptografadas mais estáveis com menos desconexões, especialmente em dispositivos móveis. A implementação em Rust reduz riscos de falhas e drenagem de bateria devido a tentativas constantes de reconexão.&lt;/p>
&lt;p>Arti é uma reescrita completa do Tor em Rust, desenvolvida pelo Tor Project para fornecer melhor segurança através de segurança de memória e integração mais fácil em aplicações. Para o Bitchat, as propriedades de segurança de memória reduzem a superfície de ataque ao lidar com mensagens criptografadas e conexões de relay. A migração segue a recente &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit">auditoria de segurança Cure53&lt;/a> da equipe (coberta no Newsletter #5), continuando suas melhorias de segurança.&lt;/p>
&lt;p>O PR também introduz cobertura de testes abrangente para ChatViewModel e BLEService, remove código morto e estabiliza a suite de testes. Melhorias de confiabilidade da malha Bluetooth Low Energy acompanham as mudanças do Tor, abordando falhas de transferências grandes. Juntas, essas mudanças melhoram a resiliência do Bitchat para cenários de rede mesh offline onde o Tor fornece conectividade com a internet junto com comunicação BLE local.&lt;/p>
&lt;h3 id="listr-revitalizado-com-manutenção-assistida-por-ia">Listr Revitalizado com Manutenção Assistida por IA&lt;/h3>
&lt;p>JeffG anunciou uma grande refatoração do &lt;a href="https://github.com/erskingardner/listr">Listr&lt;/a>, o aplicativo de gerenciamento de listas Nostr disponível em &lt;a href="https://listr.lol">listr.lol&lt;/a>, após o projeto ter ficado inativo por mais de um ano. Usando assistência de IA, ele completou uma atualização abrangente incluindo migração para &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 3 beta, atualizações para as versões mais recentes de Svelte e Vite, e todas as dependências atualizadas. A refatoração adiciona suporte de primeira classe para seguir pacotes, implementa paginação para listas excedendo 50 itens, e corrige inúmeros bugs que haviam se acumulado durante o período inativo.&lt;/p>
&lt;p>&lt;strong>O que isso significa para os usuários:&lt;/strong> Listr está de volta online com desempenho aprimorado e novos recursos para gerenciar listas de seguidores, coleções de conteúdo e curadoria de tópicos. A correção de paginação torna listas grandes realmente utilizáveis.&lt;/p>
&lt;p>JeffG observou que sem assistência de IA, este trabalho de manutenção provavelmente nunca teria acontecido, impedindo que o projeto fosse abandonado. Listr habilita curadoria de conteúdo no Nostr, permitindo que usuários criem, gerenciem e compartilhem listas de perfis, tópicos e recursos. A atualização mantém o aplicativo compatível com os padrões atuais do Nostr e expectativas dos clientes à medida que o gerenciamento de listas se torna mais central para descoberta de conteúdo no protocolo.&lt;/p>
&lt;h2 id="atualizações-de-nip">Atualizações de NIP&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mesclado:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> (Grupos baseados em relay) - Esclarecimento de Chave de Relay (&lt;a href="https://github.com/nostr-protocol/nips/pull/2190">#2190&lt;/a> - mesclado) esclarece que a chave do relay é a própria URL do relay, não uma pubkey. A especificação agora afirma explicitamente &amp;ldquo;A chave do relay é a URL WebSocket do relay (por exemplo, wss://groups.example.com)&amp;rdquo; para evitar confusão. Isso afeta como os clientes identificam qual relay hospeda um determinado grupo, garantindo que os grupos sejam atribuídos adequadamente aos seus relays de hospedagem.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos e Discussões:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Trusted Relay Assertions&lt;/strong> - Um rascunho de NIP propõe padronizar a pontuação de confiança de relay através de eventos kind 30385 contendo pontuações de confiança (0-100) calculadas a partir de métricas de &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> (descoberta e monitoramento de relay), reputação do operador e relatórios de usuários. A especificação divide a confiança em componentes de confiabilidade (tempo de atividade, latência), qualidade (TLS, documentação, verificação do operador) e acessibilidade (jurisdição, barreiras, risco de vigilância). A verificação do operador inclui assinaturas criptográficas via &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> (documentos de informações de relay), registros DNS TXT e arquivos .well-known. Usuários declaram provedores de assertivas confiáveis via eventos kind 10385, habilitando clientes a consultar múltiplos provedores para perspectivas diversas. A proposta complementa a descoberta de &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> com avaliação, ajudando &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> (assinatura remota/Nostr Connect) a avaliar a confiabilidade do relay em URIs de conexão.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Criptografia Pós-Quântica&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> (aberto) continua evoluindo desde que o &lt;a href="https://nostrcompass.org/pt/newsletters/2026-01-13-newsletter/#nip-updates">Newsletter #5&lt;/a> introduziu a proposta para algoritmos resistentes a quantum. A discussão desta semana focou em detalhes de implementação para cripto-agilidade: como clientes lidam com assinaturas duplas durante a migração, compatibilidade retroativa para clientes mais antigos e implicações de desempenho de assinaturas quânticas resistentes maiores. Contribuidores debateram se mandatar apenas ML-DSA-44 ou suportar múltiplos algoritmos (ML-DSA-44, Falcon-512, Dilithium) para flexibilidade. O consenso inclina-se para uma abordagem faseada: assinaturas quânticas opcionais inicialmente, tornando-se obrigatórias apenas após suporte generalizado do cliente e emergência de ameaça quântica real.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="mergulho-profundo-em-nip-nip-11-e-nip-66">Mergulho Profundo em NIP: NIP-11 e NIP-66&lt;/h2>
&lt;p>Esta semana examinamos dois NIPs que trabalham juntos para habilitar descoberta e avaliação de relay: NIP-11 define como relays se descrevem, e NIP-66 padroniza como medimos o comportamento do relay. Juntos, eles formam a fundação para sistemas de avaliação de confiança de relay.&lt;/p>
&lt;h3 id="nip-11pttopicsnip-11-documento-de-informações-de-relay">&lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a>: Documento de Informações de Relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/11.md">NIP-11&lt;/a> define um documento JSON que relays servem via HTTP para descrever suas capacidades, políticas e informações do operador. Quando um cliente se conecta a `wss://relay.example.com`, ele pode buscar `https://relay.example.com` (substituindo `wss://` por `https://`) para recuperar o documento de informações do relay.&lt;/p>
&lt;p>O documento usa negociação de conteúdo HTTP padrão com o cabeçalho `Accept: application/nostr+json`. Isso permite que relays sirvam seu site normal para navegadores enquanto fornecem metadados legíveis por máquina para clientes Nostr. A resposta inclui nome e versão do software do relay, informações de contato do operador (pubkey, email, contato alternativo), NIPs suportados e parâmetros operacionais como requisitos de pagamento ou restrições de conteúdo.&lt;/p>
&lt;p>Importante, documentos básicos NIP-11 são JSON não assinado servido via HTTPS, confiando apenas em certificados TLS para autenticidade. Isso significa que qualquer pessoa controlando o servidor web do relay pode modificar o documento, tornando as alegações do operador não verificáveis. A proposta Trusted Relay Assertions aborda essa lacuna introduzindo atestados assinados através do campo `self` pubkey de um relay, habilitando prova criptográfica de identidade do operador similar a como relays usam eventos assinados para mecanismos de autenticação.&lt;/p>
&lt;p>```json
{
&amp;ldquo;name&amp;rdquo;: &amp;ldquo;relay.example.com&amp;rdquo;,
&amp;ldquo;description&amp;rdquo;: &amp;ldquo;Um relay público de propósito geral&amp;rdquo;,
&amp;ldquo;pubkey&amp;rdquo;: &amp;ldquo;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;rdquo;,
&amp;ldquo;contact&amp;rdquo;: &amp;ldquo;&lt;a href="mailto:admin@example.com">admin@example.com&lt;/a>&amp;rdquo;,
&amp;ldquo;supported_nips&amp;rdquo;: [1, 2, 4, 9, 11, 12, 16, 20, 22],
&amp;ldquo;software&amp;rdquo;: &amp;ldquo;git+https://github.com/relay/relay.git&amp;rdquo;,
&amp;ldquo;version&amp;rdquo;: &amp;ldquo;1.2.3&amp;rdquo;,
&amp;ldquo;limitation&amp;rdquo;: {
&amp;ldquo;max_message_length&amp;rdquo;: 16384,
&amp;ldquo;max_subscriptions&amp;rdquo;: 20,
&amp;ldquo;max_filters&amp;rdquo;: 100,
&amp;ldquo;max_limit&amp;rdquo;: 5000,
&amp;ldquo;max_subid_length&amp;rdquo;: 100,
&amp;ldquo;min_prefix&amp;rdquo;: 4,
&amp;ldquo;max_event_tags&amp;rdquo;: 2000,
&amp;ldquo;max_content_length&amp;rdquo;: 8196,
&amp;ldquo;min_pow_difficulty&amp;rdquo;: 0,
&amp;ldquo;auth_required&amp;rdquo;: false,
&amp;ldquo;payment_required&amp;rdquo;: false
},
&amp;ldquo;payments_url&amp;rdquo;: &amp;ldquo;&lt;a href="https://relay.example.com/payments%22">https://relay.example.com/payments"&lt;/a>,
&amp;ldquo;fees&amp;rdquo;: {
&amp;ldquo;admission&amp;rdquo;: [{&amp;ldquo;amount&amp;rdquo;: 5000, &amp;ldquo;unit&amp;rdquo;: &amp;ldquo;msats&amp;rdquo;}],
&amp;ldquo;subscription&amp;rdquo;: [{&amp;ldquo;amount&amp;rdquo;: 1000, &amp;ldquo;unit&amp;rdquo;: &amp;ldquo;msats&amp;rdquo;, &amp;ldquo;period&amp;rdquo;: 2592000}],
&amp;ldquo;publication&amp;rdquo;: []
}
}
```&lt;/p>
&lt;p>O objeto `limitation` informa aos clientes quais restrições o relay aplica. `max_message_length` limita o tamanho do quadro WebSocket, `max_subscriptions` limita assinaturas REQ simultâneas por conexão, `max_filters` limita filtros por REQ, e `max_limit` restringe quantos eventos um único filtro pode solicitar. Esses parâmetros ajudam clientes a adaptar seu comportamento às capacidades do relay, evitando desconexões por exceder limites.&lt;/p>
&lt;p>Informações de pagamento aparecem em `fees` e `payments_url`. Relays podem cobrar por admissão (acesso único), assinatura (acesso recorrente) ou publicação (taxas por evento). O `payments_url` aponta para detalhes sobre métodos de pagamento, tipicamente faturas Lightning ou mints de ecash. Relays pagos usam esses campos para comunicar preços antes que clientes tentem autenticação.&lt;/p>
&lt;p>O array `supported_nips` permite que clientes descubram capacidades do relay. Se um relay lista &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>, clientes sabem que podem enviar consultas de busca de texto completo. Se &lt;a href="https://nostrcompass.org/pt/topics/nip-42/">NIP-42&lt;/a> aparecer, clientes devem esperar desafios de autenticação. Esta publicidade declarativa de capacidade habilita aprimoramento progressivo: clientes podem usar recursos avançados onde disponíveis enquanto degradam graciosamente em relays com suporte limitado.&lt;/p>
&lt;p>Informações do operador constroem responsabilidade. O campo `pubkey` identifica o operador do relay no Nostr, habilitando comunicação direta via DMs de &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> ou menções públicas. O email de `contact` fornece um backup fora do protocolo. Juntos, esses campos ajudam usuários a alcançar operadores para relatórios de abuso, solicitações de acesso ou problemas técnicos.&lt;/p>
&lt;p>Documentos &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> são auto-relatados: relays descrevem o que alegam suportar, não necessariamente o que realmente fazem. É aqui que NIP-66 se torna importante.&lt;/p>
&lt;h3 id="nip-66pttopicsnip-66-descoberta-de-relay-e-monitoramento-de-disponibilidade">&lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a>: Descoberta de Relay e Monitoramento de Disponibilidade&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/66.md">NIP-66&lt;/a> padroniza a publicação de dados de monitoramento de relay no Nostr. Serviços de monitoramento testam continuamente relays para disponibilidade, latência, conformidade com o protocolo e NIPs suportados. Eles publicam resultados como eventos kind 30166, fornecendo status de relay em tempo real independente do auto-relato do relay.&lt;/p>
&lt;p>Monitores verificam disponibilidade do relay conectando e enviando assinaturas de teste. Medições de latência rastreiam tempo de conexão, tempo de resposta de assinatura e atraso de propagação de eventos. Testes de conformidade de protocolo verificam se o comportamento do relay corresponde às especificações, capturando bugs de implementação ou desvios intencionais. Verificação de suporte a NIP vai além das alegações de &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> testando realmente se recursos anunciados funcionam corretamente.&lt;/p>
&lt;p>```json
{
&amp;ldquo;id&amp;rdquo;: &amp;ldquo;a34b5c7d89e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7&amp;rdquo;,
&amp;ldquo;pubkey&amp;rdquo;: &amp;ldquo;4e2d0bc6f8e7c3a5b9f1d2e3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;rdquo;,
&amp;ldquo;created_at&amp;rdquo;: 1736784000,
&amp;ldquo;kind&amp;rdquo;: 30166,
&amp;ldquo;tags&amp;rdquo;: [
[&amp;ldquo;d&amp;rdquo;, &amp;ldquo;wss://relay.example.com&amp;rdquo;],
[&amp;ldquo;rtt&amp;rdquo;, &amp;ldquo;open&amp;rdquo;, &amp;ldquo;143&amp;rdquo;, &amp;ldquo;1736784000&amp;rdquo;],
[&amp;ldquo;rtt&amp;rdquo;, &amp;ldquo;read&amp;rdquo;, &amp;ldquo;89&amp;rdquo;, &amp;ldquo;1736784000&amp;rdquo;],
[&amp;ldquo;rtt&amp;rdquo;, &amp;ldquo;write&amp;rdquo;, &amp;ldquo;92&amp;rdquo;, &amp;ldquo;1736784000&amp;rdquo;],
[&amp;ldquo;nips&amp;rdquo;, &amp;ldquo;1&amp;rdquo;, &amp;ldquo;2&amp;rdquo;, &amp;ldquo;4&amp;rdquo;, &amp;ldquo;9&amp;rdquo;, &amp;ldquo;11&amp;rdquo;, &amp;ldquo;12&amp;rdquo;],
[&amp;ldquo;geo&amp;rdquo;, &amp;ldquo;US&amp;rdquo;, &amp;ldquo;United States&amp;rdquo;, &amp;ldquo;New York&amp;rdquo;],
[&amp;ldquo;other&amp;rdquo;, &amp;ldquo;network&amp;rdquo;, &amp;ldquo;clearnet&amp;rdquo;],
[&amp;ldquo;other&amp;rdquo;, &amp;ldquo;payment_required&amp;rdquo;, &amp;ldquo;false&amp;rdquo;],
[&amp;ldquo;other&amp;rdquo;, &amp;ldquo;auth_required&amp;rdquo;, &amp;ldquo;false&amp;rdquo;]
],
&amp;ldquo;content&amp;rdquo;: &amp;ldquo;{\&amp;ldquo;last_check\&amp;rdquo;: 1736784000, \&amp;ldquo;checks\&amp;rdquo;: 8760}&amp;rdquo;,
&amp;ldquo;sig&amp;rdquo;: &amp;ldquo;8b9c4d5e6a7f8b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b&amp;rdquo;
}
```&lt;/p>
&lt;p>A tag `d` contém a URL do relay, tornando este um evento substituível parametrizado. Cada monitor publica um evento por relay, atualizado conforme as medições mudam. Múltiplos monitores podem rastrear o mesmo relay, fornecendo redundância e validação cruzada. Clientes consultam múltiplas pubkeys de monitores para obter perspectivas diversas sobre a saúde do relay.&lt;/p>
&lt;p>Tags de tempo de ida e volta (rtt) medem latência para diferentes operações. `rtt open` rastreia estabelecimento de conexão WebSocket, `rtt read` mede tempo de resposta de assinatura, e `rtt write` testa velocidade de publicação de eventos. Todos os valores estão em milissegundos. Clientes usam essas métricas para preferir relays de baixa latência para operações sensíveis ao tempo ou despriorizar relays lentos.&lt;/p>
&lt;p>A tag `nips` lista suporte a NIP realmente verificado, não apenas suporte alegado. Monitores testam cada NIP exercitando sua funcionalidade. Se um relay alega busca &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> em seu documento &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> mas consultas de busca falham, monitores omitirão NIP-50 da lista verificada. Isso fornece verdade fundamental sobre capacidades do relay.&lt;/p>
&lt;p>Informações geográficas ajudam clientes a selecionar relays próximos para melhor latência e resistência à censura. A tag `geo` contém código do país, nome do país e região. A tag `network` distingue relays clearnet de serviços ocultos Tor ou endpoints I2P. Juntas, essas tags habilitam diversidade geográfica: clientes podem se conectar a relays em múltiplas jurisdições para resistir à censura regional.&lt;/p>
&lt;p>Dados de monitor alimentam seletores de relay em clientes, sites exploradores e a proposta Trusted Relay Assertions. Combinando documentos auto-relatados &lt;a href="https://nostrcompass.org/pt/topics/nip-11/">NIP-11&lt;/a> com dados medidos de &lt;a href="https://nostrcompass.org/pt/topics/nip-66/">NIP-66&lt;/a> e assertivas de confiança computadas, o ecossistema caminha para seleção informada de relay em vez de confiar em padrões codificados ou recomendações de boca a boca.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;h3 id="0xchat-v153---recursos-de-mensagens-aprimorados">0xchat v1.5.3 - Recursos de Mensagens Aprimorados&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> traz melhorias significativas ao cliente de mensagens Nostr estilo Telegram. O lançamento aborda problemas de conformidade com &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> (aplicativo assinador Android) que estavam impedindo assinatura adequada de eventos através de assinadores externos como Amber. Conformidade completa significa que 0xchat agora delega corretamente operações de assinatura, melhorando a segurança mantendo chaves privadas isoladas.&lt;/p>
&lt;p>A atualização integra tanto FileDropServer quanto BlossomServer como opções de armazenamento de mídia padrão, dando aos usuários redundância para uploads de arquivo. &lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> fornece armazenamento endereçado por conteúdo onde arquivos são referenciados por seus hashes SHA-256, garantindo integridade e habilitando deduplicação através da rede. Salvamento automático de rascunho para Moments previne perda de dados ao compor conteúdo longo, abordando reclamações de usuários sobre posts perdidos durante trocas de aplicativo ou interrupções de conectividade.&lt;/p>
&lt;p>Integração de carteira Cashu recebe polimento com filtragem automática de prova que remove tokens gastos da visualização da carteira. Isso resolve a UX confusa onde usuários viam provas inválidas ao lado de ecash válido, tornando cálculos de saldo não confiáveis. A filtragem acontece no lado do cliente, mantendo privacidade enquanto melhora a experiência de pagamento para transações peer-to-peer dentro de chats.&lt;/p>
&lt;h3 id="amber-v410-pré-lançamentos---reformulação-de-ui">Amber v4.1.0 Pré-lançamentos - Reformulação 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> até &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre3">v4.1.0-pre3&lt;/a> introduzem uma interface redesenhada para o popular assinador de eventos Android. A tela de login agora exibe claramente qual aplicativo está solicitando permissões de assinatura, abordando confusão do usuário sobre fluxos de autorização. A nova tela de eventos fornece inspeção detalhada de quais dados aplicativos querem assinar, permitindo aos usuários tomar decisões de segurança informadas antes de aprovar operações.&lt;/p>
&lt;p>Gerenciamento de permissões recebe atenção significativa com uma interface reformulada mostrando exatamente quais capacidades cada aplicativo conectado recebeu. Usuários podem revogar permissões específicas sem desconectar completamente, habilitando controle de granularidade fina sobre delegação de assinatura. Os contadores de relay refatorados usando a biblioteca quartz atualizada fornecem estatísticas em tempo real sobre throughput de eventos e desempenho do relay. Conexões bunker de &lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a> (Nostr Connect) agora exibem mensagens de erro detalhadas quando conexões falham, substituindo erros de timeout crípticos por diagnósticos acionáveis.&lt;/p>
&lt;h2 id="mudanças-notáveis-em-código-e-documentação">Mudanças notáveis em código e documentação&lt;/h2>
&lt;p>&lt;em>Estes são pull requests mesclados e desenvolvimentos em estágio inicial que vale a pena acompanhar. Alguns são recursos experimentais que podem evoluir antes do lançamento.&lt;/em>&lt;/p>
&lt;h3 id="zeus-carteira-lightning-com-nostr-wallet-connect">Zeus (Carteira Lightning com Nostr Wallet Connect)&lt;/h3>
&lt;p>Zeus mesclou 17 pull requests esta semana, fortalecendo sua posição como implementação líder de &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect. As correções mais significativas abordam problemas de consistência de dados e conformidade de protocolo que estavam causando problemas de interoperabilidade com clientes Nostr.&lt;/p>
&lt;p>&lt;strong>Correção de Histórico de Transações&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3542">PR #3542&lt;/a> resolve um bug crítico onde listas de transações NWC exibiam entradas incorretas ou duplicadas. O problema ocorria quando Zeus armazenava em cache dados de transação sem lidar adequadamente com atualizações de eventos, fazendo usuários verem transações fantasma ou pagamentos faltando. A correção implementa deduplicação adequada de eventos e invalidação de cache, garantindo que o histórico de transações reflita com precisão o estado do nó Lightning.&lt;/p>
&lt;p>&lt;strong>Conformidade de Protocolo&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3548">PR #3548&lt;/a> aborda respostas incompletas de `getInfo` que quebravam compatibilidade com clientes esperando conformidade completa com NIP-47. Alguns clientes Nostr travavam ao receber respostas parciais faltando campos como `block_height` ou `network`. O PR garante que todos os campos obrigatórios retornem com padrões sensatos mesmo quando a implementação Lightning subjacente não os fornece, melhorando a compatibilidade do Zeus através do ecossistema.&lt;/p>
&lt;p>&lt;strong>Resiliência de Conexão&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3543">PR #3543&lt;/a> implementa notificações de timeout para conexões Nostr paralisadas. Anteriormente, usuários esperavam indefinidamente quando conexões de relay caíam silenciosamente. Agora Zeus exibe mensagens claras de timeout após 30 segundos de inatividade, permitindo aos usuários tentar novamente ou trocar relays. &lt;a href="https://github.com/ZeusLN/zeus/pull/3541">PR #3541&lt;/a> adiciona validação de backend para prevenir ativação de NWC em implementações Lightning incompatíveis, capturando erros de configuração antes que causem travamentos em tempo de execução.&lt;/p>
&lt;p>&lt;strong>Condição de Corrida Cashu&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3531">PR #3531&lt;/a> corrige um bug de concorrência no gerenciamento de tokens Cashu onde operações de mint simultâneas poderiam corromper o banco de dados de tokens. A condição de corrida ocorria quando múltiplas threads atualizavam contagens de tokens sem bloqueio adequado, ocasionalmente resultando em saldos incorretos. A correção adiciona proteção mutex ao redor de seções críticas, garantindo atualizações atômicas ao estado de token.&lt;/p>
&lt;h3 id="primal-android-cliente">Primal Android (Cliente)&lt;/h3>
&lt;p>Primal Android entregou 12 PRs mesclados com melhorias significativas à segurança da carteira e manuseio de mídia. A implementação de backup de carteira aborda um dos recursos mais solicitados, enquanto suporte a NIP-92 melhora a experiência visual através do aplicativo.&lt;/p>
&lt;p>&lt;strong>Sistema de Backup de Carteira&lt;/strong> - Uma série de quatro 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 funcionalidade abrangente de backup de frase semente. Usuários agora podem exportar seu mnemônico de 12 palavras através de um fluxo seguro que previne capturas de tela, exibe status de backup no painel da carteira e guia usuários existentes através da migração. A implementação segue padrões BIP-39 e inclui validação para prevenir que usuários percam fundos devido à gravação incorreta de frases.&lt;/p>
&lt;p>&lt;strong>Dimensões de Mídia (NIP-92)&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/718">PR #718&lt;/a> implementa suporte a &lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a> para proporções adequadas de imagem e vídeo. Sem metadados de dimensão, clientes devem baixar imagens para determinar seu tamanho, causando saltos de layout conforme o conteúdo carrega. NIP-92 adiciona tags `dim` (como `[&amp;ldquo;dim&amp;rdquo;, &amp;ldquo;1920x1080&amp;rdquo;]`) a eventos de metadados de arquivo, permitindo que Primal reserve espaço correto antes de baixar mídia. Isso elimina refluxos bruscos em galerias de imagem e melhora desempenho percebido.&lt;/p>
&lt;p>&lt;strong>Confiabilidade de Assinador Remoto&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/841">PR #841&lt;/a> corrige problemas de conexão &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> onde prefixos `wss://` faltando causavam falhas silenciosas. O PR valida URIs de relay durante configuração de conexão bunker, adicionando o prefixo de protocolo automaticamente quando usuários colam domínios nus. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/843">PR #843&lt;/a> aborda um bug de threading onde condições de rede ruins causavam respostas a postar como notas raiz, quebrando fluxo de conversa. A correção garante que IDs de evento pai persistam através de interrupções de rede.&lt;/p>
&lt;h3 id="protocolo-marmot-white-noise-biblioteca-de-chat-de-grupo-criptografado">Protocolo Marmot: White Noise (Biblioteca de Chat de Grupo Criptografado)&lt;/h3>
&lt;p>White Noise, a biblioteca Rust alimentando chats de grupo criptografados do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> Protocol, mesclou seis PRs melhorando experiência do usuário e segurança. As mudanças aproximam Marmot da paridade de recursos com aplicativos de mensagens mainstream enquanto mantém sua arquitetura com privacidade em primeiro lugar.&lt;/p>
&lt;p>&lt;strong>Confirmações de Leitura&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/433">PR #433&lt;/a> e &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/436">#436&lt;/a> implementam rastreamento de leitura de mensagens para conversas de grupo. O sistema armazena posições de leitura por usuário por grupo dentro de um único dispositivo, habilitando emblemas de contagem não lida. A implementação usa timestamps monotônicos para rastrear a última posição de mensagem lida para cada conversa. Este recurso fundamental habilita indicadores de UI mostrando contagens de mensagens não lidas por conversa.&lt;/p>
&lt;p>&lt;strong>Fixação de Conversa&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/442">PR #442&lt;/a> adiciona fixação de conversa persistente através de um campo `pin_order` na tabela de junção `accounts_groups` que liga contas a grupos. Conversas fixadas mantêm sua posição no topo de listas de chat independentemente de atividade de mensagem, correspondendo expectativas do usuário do Signal e WhatsApp. A implementação usa ordenação inteira para permitir fixações ilimitadas com ordenação determinística.&lt;/p>
&lt;p>&lt;strong>Resolução Determinística de Commit (MIP-03)&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">PR #152&lt;/a> (aberto) implementa Marmot Improvement Proposal 03, resolvendo o problema crítico de condições de corrida de commit em chats de grupo distribuídos. Quando múltiplos membros enviam mudanças de estado de grupo (adicionar/remover membros, mudar permissões) simultaneamente, clientes poderiam divergir na ordenação de commits, fragmentando o grupo em estados incompatíveis. MIP-03 introduz snapshots de época e uma seleção determinística de vencedor: o commit com o timestamp `created_at` mais cedo vence, com ID de evento lexicográfico como desempate. Isso permite que todos os clientes convirjam no mesmo estado através de rollback e replay, mantendo coerência de grupo mesmo durante partições de rede.&lt;/p>
&lt;p>&lt;strong>Endurecimento de Segurança&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/443">PR #443&lt;/a> previne cópia desnecessária de segredos criptográficos usando referências em `resolve_group_image_path`. Isso reduz a janela para ataques de memória onde segredos poderiam ser recuperados de alocações de heap liberadas. &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/438">PR #438&lt;/a> habilita criptografia de banco de dados SQLCipher através de parâmetros de chaveiro, protegendo histórico de mensagens em repouso. A integração de chaveiro permite armazenamento seguro de chaves em chaveiros de plataforma em vez de arquivos de configuração.&lt;/p>
&lt;h3 id="nostrdb-rs-biblioteca-de-banco-de-dados---pr-aberto">nostrdb-rs (Biblioteca de Banco de Dados) - PR Aberto&lt;/h3>
&lt;p>&lt;strong>Implementação de Consultas Streaming&lt;/strong> - &lt;a href="https://github.com/damus-io/nostrdb-rs/pull/58">PR #58&lt;/a> (aberto) propõe consultas fold streaming para habilitar operações de banco de dados com alocação zero. A implementação adiciona métodos `fold`, `try_fold`, `count`, `any`, `all` e `find_map` que processariam resultados de banco de dados um de cada vez sem materializar conjuntos de resultados inteiros em vetores. Esta abordagem reduziria consumo de memória e habilitaria terminação antecipada para padrões de consulta comuns.&lt;/p>
&lt;p>A implementação técnica expõe callbacks de resultado de consulta de baixo nível (`ndb_query_visit`) como visitantes Rust com estado que mapeiam variantes `ControlFlow` para ações de visitante C. Uma vez mesclado, código de aplicação lerá como lógica de iterador enquanto roda perto da camada de banco de dados. Por exemplo, contar notas correspondentes transmitiria através de resultados em vez de coletá-los, e `find_map` retornaria o primeiro resultado útil sem processar linhas restantes.&lt;/p>
&lt;p>nostrdb alimenta Damus e Notedeck, ambos clientes iOS/macOS e desktop respectivamente. As consultas streaming habilitariam padrões eficientes como paginação, filtragem condicional e verificações de existência. O PR muda 3 arquivos com +756 adições e -32 deleções, uma refatoração substancial da camada de consulta. Usuários de aplicativos baseados em nostrdb-rs veriam uso de memória reduzido ao navegar timelines grandes ou buscar através de bancos de dados extensos de eventos.&lt;/p>
&lt;h3 id="nak-ferramenta-cli">nak (Ferramenta CLI)&lt;/h3>
&lt;p>nak, ferramenta Nostr de linha de comando de fiatjaf, mesclou seis PRs focados em melhorias de sistema de build e nova funcionalidade. &lt;a href="https://github.com/fiatjaf/nak/pull/91">PR #91&lt;/a> implementa um recurso de espelho Blossom, permitindo que nak sirva como um espelho para servidores de mídia Blossom. &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> é um protocolo de armazenamento de mídia endereçado por conteúdo que funciona junto com eventos Nostr.&lt;/p>
&lt;p>Os PRs restantes abordam compatibilidade de sistema de build através de plataformas Windows, macOS e Linux, habilitando suporte a sistema de arquivos FUSE para montar eventos Nostr como diretórios locais.&lt;/p>
&lt;h3 id="damus-cliente-ios---prs-abertos">Damus (Cliente iOS) - PRs Abertos&lt;/h3>
&lt;p>Damus tem 11 PRs abertos explorando melhorias arquiteturais significativas. Embora estes ainda não tenham sido mesclados, eles sinalizam direções importantes para desenvolvimento de cliente Nostr iOS, particularmente em torno de privacidade, eficiência de sincronização e otimização de dados móveis.&lt;/p>
&lt;p>&lt;strong>Integração Tor&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3535">PR #3535&lt;/a> embute o cliente Arti Tor diretamente no Damus, habilitando conexões de relay anônimas sem dependências externas. Diferente de abordagens Orbot ou Tor Browser, embutir Arti fornece integração perfeita com sandboxing iOS e limites de execução em segundo plano. A implementação Rust traz segurança de memória para anonimização de rede, reduzindo superfície de ataque comparada ao C Tor. Usuários poderiam alternar modo Tor por relay ou globalmente, com o cliente lidando com gerenciamento de circuito de forma transparente.&lt;/p>
&lt;p>&lt;strong>Protocolo de Sincronização Negentropy&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> implementa Negentropy, um protocolo de reconciliação de conjunto que melhora radicalmente a eficiência de sincronização. Em vez de baixar todos os eventos desde a última conexão, Negentropy troca impressões digitais compactas (árvores Merkle) para identificar exatamente quais eventos diferem entre cliente e relay. Para usuários seguindo centenas de pubkeys, isso reduz largura de banda de sincronização de megabytes para kilobytes. A implementação integra com RelayPool e SubscriptionManager, habilitando sincronização eficiente automática através de todos os relays conectados.&lt;/p>
&lt;p>&lt;strong>Modo de Dados Baixos&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3549">PR #3549&lt;/a> adiciona recursos de conservação de dados celulares respondendo a feedback de usuários sobre consumo de largura de banda. O modo desabilita carregamento automático de imagem, pré-busca de vídeo e reduz limites de assinatura. Usuários com conexões medidas podem navegar conteúdo de texto sem medo de exceder limites de dados. A implementação respeita configurações de modo de dados baixos do iOS e fornece controles granulares para diferentes tipos de mídia.&lt;/p>
&lt;p>&lt;strong>Otimizações de Banco de Dados&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3548">PR #3548&lt;/a> refaz armazenamento de snapshot nostrdb para consultas mais rápidas e uso de disco reduzido. A otimização muda como snapshots de banco de dados persistem em disco, melhorando tanto desempenho de leitura quanto amplificação de escrita. Isso aborda reclamações de drenagem de bateria de usuários com grandes bancos de dados de eventos.&lt;/p>
&lt;hr>
&lt;p>É isso para esta semana. Construindo algo? Tem notícias para compartilhar? Quer que cubramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via DM NIP-17&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #5</title><link>https://nostrcompass.org/pt/newsletters/2026-01-13-newsletter/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-01-13-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Bitchat passa por uma auditoria de segurança profissional pela Cure53, a mesma empresa que auditou o Signal e o &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, com mais de 17 PRs já mesclados corrigindo descobertas críticas. O &lt;a href="https://nostrcompass.org/pt/topics/nip-71/">NIP-71&lt;/a> é mesclado, trazendo eventos de vídeo endereçáveis para o protocolo. Um NIP de criptografia pós-quântica abre discussão sobre como preparar o Nostr para o futuro contra ataques quânticos. O Amethyst v1.05.0 lança listas de favoritos, notas de voz e uma versão inicial para desktop, enquanto o Nostur v1.25.3 melhora as DMs do &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> com reações e respostas. Em notícias de bibliotecas, o rust-nostr expande o suporte ao &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> para os backends SQLite e LMDB, e o NDK corrige um bug de rastreamento de assinaturas.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Bitchat passa por uma auditoria de segurança profissional pela Cure53, a mesma empresa que auditou o Signal e o &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>, com mais de 17 PRs já mesclados corrigindo descobertas críticas. O &lt;a href="https://nostrcompass.org/pt/topics/nip-71/">NIP-71&lt;/a> é mesclado, trazendo eventos de vídeo endereçáveis para o protocolo. Um NIP de criptografia pós-quântica abre discussão sobre como preparar o Nostr para o futuro contra ataques quânticos. O Amethyst v1.05.0 lança listas de favoritos, notas de voz e uma versão inicial para desktop, enquanto o Nostur v1.25.3 melhora as DMs do &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> com reações e respostas. Em notícias de bibliotecas, o rust-nostr expande o suporte ao &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> para os backends SQLite e LMDB, e o NDK corrige um bug de rastreamento de assinaturas.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;h3 id="bitchat-conclui-auditoria-de-segurança-da-cure53">Bitchat Conclui Auditoria de Segurança da Cure53&lt;/h3>
&lt;p>O Bitchat, o mensageiro criptografado para iOS que combina Nostr com Cashu, passou por uma auditoria de segurança profissional pela Cure53, uma das empresas de segurança mais respeitadas do setor. A Cure53 auditou anteriormente o Signal, o Mullvad VPN e, notavelmente, a especificação de criptografia &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> que sustenta as mensagens privadas modernas do Nostr.&lt;/p>
&lt;p>A auditoria encontrou mais de 12 problemas de segurança (BCH-01-002 até BCH-01-013). A equipe do Bitchat respondeu com mais de 17 pull requests. As principais correções incluem:&lt;/p>
&lt;p>&lt;strong>Limpeza de Segredo DH do Protocolo Noise&lt;/strong> - O &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">PR #928&lt;/a> corrige seis locais onde os segredos compartilhados Diffie-Hellman não estavam sendo zerados após o acordo de chaves, restaurando as garantias de forward secrecy. Quando os segredos persistem na memória por mais tempo do que o necessário, um dump de memória ou ataque cold boot poderia comprometer comunicações passadas.&lt;/p>
&lt;p>&lt;strong>Verificação de Assinatura&lt;/strong> - Múltiplos PRs fortalecem os caminhos de verificação criptográfica, garantindo que as verificações de autenticidade das mensagens não possam ser contornadas através de entradas malformadas.&lt;/p>
&lt;p>&lt;strong>Thread Safety&lt;/strong> - O &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">PR #929&lt;/a> adiciona sincronização de barreira às filas de confirmação de leitura no NostrTransport, prevenindo condições de corrida que poderiam causar corrupção de dados ou travamentos sob alto volume de mensagens.&lt;/p>
&lt;p>&lt;strong>Segurança de Memória&lt;/strong> - O &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">PR #920&lt;/a> otimiza o deduplicador de mensagens para melhor desempenho com alto throughput de mensagens, evitando esgotamento de memória.&lt;/p>
&lt;p>&lt;strong>Validação de Entrada&lt;/strong> - O &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">PR #919&lt;/a> fortalece a análise de strings hexadecimais para prevenir travamentos por entrada malformada, um vetor de ataque comum para negação de serviço.&lt;/p>
&lt;p>O Bitchat lida com ecash Cashu, tornando a revisão de segurança profissional essencial. A auditoria segue a auditoria do Protocolo &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot&lt;/a> do ano passado e a auditoria do NIP-44 que verificou a camada de criptografia.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mesclados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-71/">NIP-71&lt;/a>&lt;/strong> - Eventos de Vídeo Endereçáveis (&lt;a href="https://github.com/nostr-protocol/nips/pull/1669">#1669&lt;/a>) introduz os kinds 34235 (vídeo horizontal) e 34236 (vídeo vertical) como eventos endereçáveis. Uma tag &lt;code>d&lt;/code> obrigatória fornece identificadores únicos, para que os metadados do vídeo possam ser atualizados sem republicar o evento inteiro. Uma tag &lt;code>origin&lt;/code> opcional rastreia fontes de importação. Já implementado no Amethyst e nostrvine.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Criptografia Pós-Quântica&lt;/strong> - O &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> propõe adicionar algoritmos criptográficos resistentes a quantum ao Nostr. A especificação introduz ML-DSA-44 e Falcon-512 para assinaturas digitais, visando &amp;ldquo;eventos de valor super alto&amp;rdquo; como aplicações e autoridades, em vez de usuários individuais. Enquanto a criptografia simétrica do &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> (ChaCha20) é resistente a quantum, sua troca de chaves usa secp256k1 ECDH que é vulnerável ao algoritmo de Shor. A proposta inclui ML-KEM para acordo de chaves para resolver essa lacuna. Esta é uma proposta em estágio inicial abrindo discussão sobre agilidade criptográfica para a segurança de longo prazo do Nostr.&lt;/li>
&lt;li>&lt;strong>BOLT12 para NIP-47&lt;/strong> - Após 137 comentários e discussão extensiva, a comunidade decidiu que as ofertas BOLT12 merecem sua própria especificação em vez de estender o &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a>. As ofertas BOLT12 fornecem melhorias significativas sobre faturas BOLT11, incluindo reutilizabilidade, melhor privacidade através de caminhos cegos e informações opcionais do pagador. O novo NIP definirá métodos como &lt;code>make_offer&lt;/code>, &lt;code>pay_offer&lt;/code> e &lt;code>list_offers&lt;/code> para implementações do Nostr Wallet Connect.&lt;/li>
&lt;li>&lt;strong>NIP de Faixa de Áudio&lt;/strong> - O &lt;a href="https://github.com/nostr-protocol/nips/pull/1043">PR #1043&lt;/a> propõe kinds 32100 para faixas de música e 32101 para episódios de podcast, dando ao conteúdo de áudio o mesmo tratamento de primeira classe que o NIP-71 fornece para vídeo. Atualmente, plataformas de áudio como Wavlake, Zapstr e Stemstr usam formatos de eventos proprietários, fragmentando o ecossistema. Um padrão comum permitiria interoperabilidade para que os usuários pudessem descobrir e reproduzir áudio de qualquer cliente compatível.&lt;/li>
&lt;li>&lt;strong>NIP-A3 Alvos de Pagamento Universais&lt;/strong> - O &lt;a href="https://github.com/nostr-protocol/nips/pull/2119">PR #2119&lt;/a> propõe eventos kind 10133 usando URIs &lt;code>payto:&lt;/code> RFC-8905 para expor opções de pagamento através de múltiplas redes. Em vez de criar kinds de eventos separados para Bitcoin, Lightning, Cashu ou trilhos de pagamento tradicionais, essa abstração permite que os clientes analisem tags padronizadas e invoquem manipuladores de pagamento nativos. A abordagem é à prova de futuro, já que novos métodos de pagamento precisam apenas de um esquema de URI &lt;code>payto:&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="aprofundamento-em-nips-nip-51-e-nip-65">Aprofundamento em NIPs: NIP-51 e NIP-65&lt;/h2>
&lt;p>Esta semana cobrimos dois NIPs que armazenam preferências do usuário: NIP-51 para organizar conteúdo e NIP-65 para organizar conexões de relay. Ambos usam eventos substituíveis, o que significa que cada nova publicação sobrescreve a versão anterior.&lt;/p>
&lt;h3 id="nip-51pttopicsnip-51-listas">&lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>: Listas&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">NIP-51&lt;/a> define múltiplos tipos de lista para organizar referências a eventos, usuários, hashtags e outros conteúdos. O Amethyst v1.05.0 adiciona suporte a favoritos, tornando este um bom momento para entender como as listas funcionam.&lt;/p>
&lt;p>A especificação define vários kinds de lista, cada um servindo a um propósito diferente. O Kind 10000 é sua lista de silenciados para ocultar usuários, threads ou palavras. O Kind 10001 fixa eventos para destacar em seu perfil. O Kind 30003 armazena favoritos, que é o que o Amethyst agora suporta. Outros kinds lidam com conjuntos de seguidos (30000), coleções de artigos curados (30004), interesses de hashtags (30015) e conjuntos de emojis personalizados (30030).&lt;/p>
&lt;p>As listas referenciam conteúdo através de tags. Uma lista de favoritos usa tags &lt;code>e&lt;/code> para eventos específicos e tags &lt;code>a&lt;/code> para conteúdo endereçável como artigos:&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>A tag &lt;code>d&lt;/code> fornece um identificador único, para que você possa manter múltiplos conjuntos de favoritos como &amp;ldquo;saved-articles&amp;rdquo;, &amp;ldquo;read-later&amp;rdquo; ou &amp;ldquo;favorites&amp;rdquo; sob o mesmo kind.&lt;/p>
&lt;p>As listas suportam itens públicos e privados. Itens públicos aparecem no array de tags, visíveis para qualquer pessoa que busque o evento. Itens privados vão no campo &lt;code>content&lt;/code>, criptografados usando &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a> para você mesmo. Essa estrutura dupla permite que você mantenha favoritos públicos enquanto anexa notas privadas, ou mantenha uma lista de silenciados sem revelar quem você silenciou. Para criptografar para você mesmo, use o NIP-44 com sua própria pubkey como destinatário.&lt;/p>
&lt;p>Os kinds da série 10000 são substituíveis, o que significa que os relays mantêm apenas um evento por pubkey. Os da série 30000 são substituíveis parametrizados, permitindo um evento por combinação de pubkey e tag &lt;code>d&lt;/code>. Em ambos os casos, atualizar uma lista significa publicar uma substituição completa; você não pode enviar mudanças incrementais. Os clientes devem preservar tags desconhecidas ao modificar listas para evitar sobrescrever dados adicionados por outras aplicações.&lt;/p>
&lt;h3 id="nip-65pttopicsnip-65-metadados-de-lista-de-relays">&lt;a href="https://nostrcompass.org/pt/topics/nip-65/">NIP-65&lt;/a>: Metadados de Lista de Relays&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> define eventos kind 10002 que anunciam quais relays um usuário prefere para leitura e escrita. Isso ajuda outros usuários e clientes a encontrar seu conteúdo.&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 tag &lt;code>r&lt;/code> contém uma URL de relay e um marcador opcional. Um marcador &lt;code>write&lt;/code> designa sua outbox: relays onde você publica seu conteúdo. Um marcador &lt;code>read&lt;/code> designa sua inbox: relays onde você verifica menções, respostas e tags. Omitir o marcador indica ambos.&lt;/p>
&lt;p>Quando Alice quer encontrar os posts de Bob, seu cliente busca o kind 10002 de Bob, extrai seus relays de escrita (sua outbox) e se inscreve lá. Quando Alice responde a Bob, seu cliente publica em seus relays de leitura (sua inbox) para que ele veja a menção. Esse roteamento consciente de relays é o &amp;ldquo;modelo outbox&amp;rdquo;, e ele distribui os usuários entre muitos relays em vez de concentrar todos em poucos servidores centrais.&lt;/p>
&lt;p>O NIP-65 lida com roteamento de conteúdo público, mas mensagens privadas usam uma lista separada. O &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> define o kind 10050 para relays de inbox de DM, usando tags &lt;code>relay&lt;/code> em vez de tags &lt;code>r&lt;/code>. Ao enviar a alguém uma mensagem privada, os clientes procuram o evento kind 10050 do destinatário e publicam a mensagem gift-wrapped criptografada lá. Essa separação mantém o roteamento de DM distinto do roteamento de conteúdo público e permite que os usuários especifiquem relays diferentes para comunicação privada versus pública.&lt;/p>
&lt;p>O modelo outbox melhora a resistência à censura, já que nenhum relay único precisa armazenar ou servir o conteúdo de todos. Os clientes mantêm conexões com relays listados nos eventos NIP-65 de seus usuários seguidos, conectando-se dinamicamente a novos relays conforme descobrem novas contas. O NIP-65 complementa as dicas de relay encontradas em outros NIPs. Quando você marca alguém com &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;wss://hint.relay&amp;quot;]&lt;/code>, a dica informa aos clientes onde procurar essa referência específica. O NIP-65 fornece a lista autoritativa controlada pelo usuário, enquanto as dicas oferecem atalhos incorporados em eventos individuais.&lt;/p>
&lt;p>Para melhores resultados, mantenha sua lista de relays atualizada, já que entradas desatualizadas tornam você mais difícil de encontrar. A especificação recomenda de dois a quatro relays por categoria. Listar muitos relays sobrecarrega cada cliente que deseja buscar seu conteúdo, diminuindo sua experiência e aumentando a carga da rede. Os clientes armazenam em cache os eventos NIP-65 e os atualizam periodicamente para se manterem atualizados conforme os usuários atualizam suas preferências.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;p>&lt;strong>Amethyst v1.05.0&lt;/strong> - O popular cliente Android &lt;a href="https://github.com/vitorpamplona/amethyst/releases">lança uma atualização importante&lt;/a> com várias funcionalidades de destaque. As listas de favoritos &lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a> kind 30003 permitem que os usuários salvem posts para referência posterior, sincronizando entre clientes compatíveis. As notas de voz agora funcionam em DMs e posts regulares com visualização de forma de onda, seleção de servidor de mídia e indicadores de progresso de upload. As pontuações de &lt;a href="https://nostrcompass.org/pt/topics/web-of-trust/">Web of Trust&lt;/a> agora são visíveis na interface, ajudando os usuários a entender como o algoritmo avalia contas em relação ao seu grafo social. A migração do banco de dados &lt;a href="https://nostrcompass.org/pt/topics/quartz/">Quartz&lt;/a> melhora o desempenho de consultas como parte do trabalho de Kotlin Multiplatform financiado pela OpenSats. Uma versão inicial para desktop traz o Amethyst para Windows, macOS e Linux via Compose Multiplatform, compartilhando a mesma base de código do aplicativo Android. Novos fluxos de onboarding suavizam a experiência para usuários de primeira viagem no Nostr.&lt;/p>
&lt;p>&lt;strong>Nostur v1.25.3&lt;/strong> - O cliente iOS e macOS &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases">foca em mensagens privadas&lt;/a> com melhorias no &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>. As conversas de DM agora suportam reações e respostas, trazendo a interatividade dos posts públicos para mensagens criptografadas. A visualização de conversa foi reformulada com melhor threading para que trocas de múltiplas mensagens sejam mais fáceis de seguir, e os timestamps mostram &amp;ldquo;tempo atrás&amp;rdquo; na lista de DM para escaneamento rápido. Usuários de desktop ganham layouts de múltiplas colunas para visualizar múltiplos feeds ou conversas lado a lado. O suporte a assinante remoto &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> permite que os usuários mantenham suas chaves privadas em aplicativos de assinatura dedicados como Amber ou nsec.app. Correções adicionais restauram a funcionalidade de DM no iOS 15 e iOS 16, resolvem atrasos de notificação e adicionam a capacidade de configurar quais relays recebem DMs publicadas.&lt;/p>
&lt;h2 id="mudanças-notáveis-de-código-e-documentação">Mudanças notáveis de código e documentação&lt;/h2>
&lt;p>&lt;em>Estes são pull requests abertos e trabalhos em estágio inicial, perfeitos para obter feedback antes de serem mesclados. Se algo chamar sua atenção, considere revisar ou comentar!&lt;/em>&lt;/p>
&lt;h3 id="citrine-relay-android">Citrine (Relay Android)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/greenart7c3/Citrine/pull/89">PR #89&lt;/a> corrige uma vulnerabilidade de injeção SQL no aplicativo de relay pessoal para Android. O problema permitia que dados de eventos malformados executassem consultas arbitrárias ao banco de dados, uma falha séria para qualquer aplicativo que armazena e processa entrada não confiável. A correção sanitiza adequadamente todas as operações de banco de dados usando consultas parametrizadas. Nenhuma versão foi marcada ainda, então os usuários precisarão esperar pela próxima versão ou compilar a partir do código-fonte. O &lt;a href="https://github.com/greenart7c3/Citrine/pull/90">PR #90&lt;/a> otimiza o desempenho de consultas do ContentProvider com filtragem e paginação em nível de banco de dados, reduzindo a latência quando aplicativos externos como o Amethyst acessam o banco de dados de eventos do Citrine através da camada de comunicação entre processos do Android.&lt;/p>
&lt;h3 id="rust-nostr-biblioteca">rust-nostr (Biblioteca)&lt;/h3>
&lt;p>O suporte ao &lt;a href="https://nostrcompass.org/pt/topics/nip-62/">NIP-62&lt;/a> (Vanish Requests) está se expandindo pelos backends de banco de dados do rust-nostr. O &lt;a href="https://github.com/rust-nostr/nostr/pull/1180">PR #1180&lt;/a>, mesclado há duas semanas, adicionou suporte ao NIP-62 para SQLite, lidando com requisições vanish &lt;code>ALL_RELAYS&lt;/code> já que a camada de banco de dados não conhece URLs de relay específicos. O &lt;a href="https://github.com/rust-nostr/nostr/pull/1210">PR #1210&lt;/a> estende isso para o backend LMDB, garantindo que as requisições vanish sejam persistidas no disco e sobrevivam a reinicializações do relay. Uma implementação IndexedDB para ambientes de navegador também está em andamento. Juntas, essas mudanças dão aos desenvolvedores suporte consistente ao NIP-62 através de SQLite, LMDB e em breve armazenamento de navegador.&lt;/p>
&lt;h3 id="ndk-nostr-development-kit">NDK (Nostr Development Kit)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/375">PR #375&lt;/a> corrige um bug no sistema de rastreamento seenEvents. O problema fazia com que certos padrões de assinatura marcassem incorretamente eventos como já vistos, levando à perda de conteúdo quando os usuários abriam novas assinaturas ou reconectavam a relays. A correção garante que os eventos sejam rastreados com precisão ao longo dos ciclos de vida das assinaturas, o que é particularmente importante para aplicações que assinam e cancelam assinaturas dinamicamente com base na navegação do usuário. O NDK foi atualizado para beta.70 com essa correção incluída.&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/damus-io/damus/pull/3515">PR #3515&lt;/a> corrige um travamento de inicialização afetando usuários do iOS 17. O problema decorreu de um overflow aritmético em &lt;code>NdbUseLock&lt;/code>, uma classe de fallback usada porque Swift Mutexes não estão disponíveis no iOS 17. A correção substitui a abordagem de sincronização anterior por &lt;code>NSLock&lt;/code>, que está disponível no iOS 17 e lida corretamente com as condições de corrida restantes. Usuários do iOS 18+ não foram afetados, já que têm acesso à implementação nativa de Swift Mutex.&lt;/p>
&lt;p>Separadamente, um lote de melhorias para artigos longos foi implementado via &lt;a href="https://github.com/damus-io/damus/pull/3509">PR #3509&lt;/a>. Barras de progresso de leitura rastreiam sua posição nos artigos, tempos estimados de leitura aparecem nas previews, e o modo sépia com configurações ajustáveis de altura de linha proporcionam leitura mais confortável. O modo de foco oculta automaticamente o chrome de navegação ao rolar para baixo e o restaura ao tocar, reduzindo a desordem visual para leitura sem distrações. Várias correções resolvem a exibição de imagens em conteúdo markdown e garantem que os artigos abram no topo em vez de no meio.&lt;/p>
&lt;h3 id="zapstream-transmissão-ao-vivo">Zap.stream (Transmissão ao Vivo)&lt;/h3>
&lt;p>A integração de chat do YouTube e Kick faz ponte de mensagens de plataformas de streaming externas para o Nostr. Streamers que transmitem simultaneamente para YouTube, Kick e Zap.stream agora podem ver todas as mensagens de chat em uma visualização unificada, com mensagens de cada plataforma aparecendo ao lado de comentários nativos do Nostr. Isso remove um grande ponto de atrito para criadores que desejam usar o Nostr para streaming, mas não podem abandonar audiências em plataformas estabelecidas. A integração exibe de qual plataforma cada mensagem se originou e lida com o fluxo de autenticação para conectar contas externas.&lt;/p>
&lt;h3 id="chachi-grupos-nip-29">Chachi (Grupos NIP-29)&lt;/h3>
&lt;p>O cliente de chat em grupo &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> lançou seis PRs mesclados esta semana. Uma atualização de segurança resolve o &lt;a href="https://github.com/purrgrammer/chachi/pull/89">CVE-2026-22029&lt;/a>, uma vulnerabilidade XSS no react-router que poderia permitir ataques de redirecionamento aberto; a correção atualiza para react-router-dom 6.30.0. O &lt;a href="https://github.com/purrgrammer/chachi/pull/92">PR #92&lt;/a> adiciona carregamento paginado de mensagens para chats em grupo, para que conversas longas carreguem incrementalmente em vez de todas de uma vez. O &lt;a href="https://github.com/purrgrammer/chachi/pull/91">PR #91&lt;/a> corrige vários bugs do NIP-29 incluindo uma condição de corrida que causava nomes de grupo em branco no carregamento inicial e listas de participantes indefinidas que travavam as visualizações de membros. A cobertura de tradução agora abrange todos os 31 locales suportados com 1060 chaves cada.&lt;/p>
&lt;h3 id="0xchat-mensagens">0xchat (Mensagens)&lt;/h3>
&lt;p>O cliente de mensagens estilo Telegram melhorou a conformidade com o &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> salvando corretamente os nomes de pacote do assinante ao usar aplicativos de assinatura externos, corrigindo problemas onde o aplicativo perdia o rastro de qual assinante usar após reinicializações. O tratamento de respostas do NIP-17 agora inclui corretamente a tag &lt;code>e&lt;/code> para threading, garantindo que as respostas apareçam no contexto de conversa correto entre clientes. Otimizações de desempenho resolvem lag de rolagem em listas de mensagens, um ponto de dor comum ao carregar históricos de chat longos. O salvamento automático de rascunhos previne perda de mensagem se você navegar para longe no meio da composição, e as opções de armazenamento de arquivos agora incluem endpoints padrão de FileDropServer e BlossomServer.&lt;/p>
&lt;h3 id="primal-ios">Primal (iOS)&lt;/h3>
&lt;p>O suporte a assinante remoto &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> chega ao iOS via &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/184">PR #184&lt;/a>, completando o lançamento multiplataforma que começou com Android há várias semanas. Os usuários agora podem manter suas chaves privadas em serviços bunker dedicados como nsec.app ou instâncias nsecBunker auto-hospedadas, conectando através de relays Nostr para assinar eventos sem expor chaves ao aplicativo cliente. Essa separação melhora a postura de segurança para usuários que desejam usar os recursos do Primal enquanto mantêm práticas de gerenciamento de chaves mais rigorosas. A implementação inclui escaneamento de código QR para URIs de conexão bunker e lida com o fluxo de requisição/resposta do NIP-46 através de mensagens de relay criptografadas.&lt;/p>
&lt;hr>
&lt;p>É isso para esta semana. Construindo algo? Tem notícias para compartilhar? Quer que a gente cubra seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via DM NIP-17&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #4</title><link>https://nostrcompass.org/pt/newsletters/2026-01-07-newsletter/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2026-01-07-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Primal Android lança suporte para assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e assinatura local &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, tornando-se um hub completo de assinatura para outros aplicativos Android. A equipe do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot Protocol&lt;/a> abordou descobertas de uma auditoria de segurança com 18 PRs mesclados, fortalecendo a mensageria criptografada baseada em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a>. O Citrine atinge a v1.0 e o Applesauce lança a v5.0 em toda sua suíte de bibliotecas. O TENEX desenvolve supervisão de agentes de IA no Nostr, e o Jumble adiciona pooling inteligente de relays. Uma correção na especificação NIP-55 esclarece os campos de retorno do &lt;code>nip44_encrypt&lt;/code>, e um PR do &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> propõe extensões de expressões de consulta para busca avançada. Em nosso aprofundamento, explicamos &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>: por que a criptografia legada tem falhas de segurança e como a substituição moderna as corrige.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal para o ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> O Primal Android lança suporte para assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e assinatura local &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, tornando-se um hub completo de assinatura para outros aplicativos Android. A equipe do &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Marmot Protocol&lt;/a> abordou descobertas de uma auditoria de segurança com 18 PRs mesclados, fortalecendo a mensageria criptografada baseada em &lt;a href="https://nostrcompass.org/pt/topics/mls/">MLS&lt;/a>. O Citrine atinge a v1.0 e o Applesauce lança a v5.0 em toda sua suíte de bibliotecas. O TENEX desenvolve supervisão de agentes de IA no Nostr, e o Jumble adiciona pooling inteligente de relays. Uma correção na especificação NIP-55 esclarece os campos de retorno do &lt;code>nip44_encrypt&lt;/code>, e um PR do &lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a> propõe extensões de expressões de consulta para busca avançada. Em nosso aprofundamento, explicamos &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>: por que a criptografia legada tem falhas de segurança e como a substituição moderna as corrige.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;p>&lt;strong>Primal Android se Torna um Hub Completo de Assinatura&lt;/strong> - A &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">versão 2.6.18&lt;/a> adiciona tanto assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> quanto assinatura local &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, transformando o Primal em um assinador completo para outros aplicativos Nostr. A assinatura remota via NIP-46 permite que usuários se conectem a serviços bunker através de relays Nostr, mantendo as chaves completamente fora do dispositivo. A assinatura local via NIP-55 expõe o Primal como um provedor de conteúdo Android, para que aplicativos como Amethyst ou Citrine possam solicitar assinaturas sem nunca tocar na chave privada. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/839">Vários PRs de acompanhamento&lt;/a> corrigiram problemas de compatibilidade com o requisito de pubkey hexadecimal da especificação NIP-55 e melhoraram o parsing de URIs &lt;code>nostrconnect://&lt;/code> malformadas. O lançamento também inclui pré-cache de mídia para rolagem mais suave, tempos de carregamento de threads aprimorados e pré-cache de avatares.&lt;/p>
&lt;p>&lt;strong>Marmot Protocol Fortalece Segurança Após Auditoria&lt;/strong> - O &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> (mdk), que implementa mensageria criptografada de ponta a ponta baseada em MLS do &lt;a href="https://nostrcompass.org/pt/topics/nip-104/">NIP-104&lt;/a>, recebeu extensas correções de segurança esta semana. Dezoito pull requests mesclados abordaram descobertas da auditoria, incluindo: &lt;a href="https://github.com/marmot-protocol/mdk/pull/97">verificação de hash para imagens de grupo criptografadas&lt;/a> para prevenir ataques de substituição de blob no nível de armazenamento, &lt;a href="https://github.com/marmot-protocol/mdk/pull/110">paginação para boas-vindas pendentes&lt;/a> para prevenir esgotamento de memória, &lt;a href="https://github.com/marmot-protocol/mdk/pull/112">vazamento de Group ID MLS em mensagens de erro&lt;/a>, e &lt;a href="https://github.com/marmot-protocol/mdk/pull/98">aplicação de codificação base64&lt;/a> para pacotes de chaves. A &lt;a href="https://github.com/marmot-protocol/marmot/pull/20">própria especificação Marmot foi atualizada&lt;/a> com versionamento MIP-04 v2 e melhorias de segurança. PRs ativos continuam abordando reutilização de nonce, zeroização de segredos e vetores de poluição de cache.&lt;/p>
&lt;p>&lt;strong>Nostrability Rastreia Suporte a Relay Hints&lt;/strong> - Um novo &lt;a href="https://github.com/nostrability/nostrability/issues/270">rastreador de compatibilidade de relay hints&lt;/a> documenta como os clientes constroem e consomem relay hints em todo o ecossistema. O rastreador revela que, embora a maioria dos clientes agora construa hints conforme o &lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10&lt;/a> e &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a>, o consumo varia amplamente: alguns clientes incluem hints em eventos de saída, mas não usam hints de entrada para busca. Seis clientes ganharam status de nível &amp;ldquo;Completo&amp;rdquo; por implementação completa. O rastreador é útil para desenvolvedores verificando interoperabilidade e para usuários se perguntando por que alguns clientes encontram conteúdo que outros não conseguem.&lt;/p>
&lt;p>&lt;strong>Nostria 2.0 Lança Reformulação de Recursos Multiplataforma&lt;/strong> - O cliente &lt;a href="https://nostria.app">Nostria&lt;/a> &lt;a href="#ZgotmplZ">lançou a versão 2.0&lt;/a> em 30 de dezembro com adições significativas em iOS (TestFlight), Android (Play Store), Web e Windows. O lançamento adiciona suporte nativo a música com criação de playlists, upload de faixas, pagamentos de artistas via zap e um player estilo WinAmp com equalizador funcional. Transmissões ao vivo ganham integração com Game API mostrando metadados ricos durante streams de gameplay. Um novo recurso de Resumo gera digestos de atividade por hora, dia ou semana como visualizações de timeline comprimidas. A seção Descobrir oferece listas curadas para encontrar conteúdo e perfis. A publicação de mídia é simplificada com geração automática de posts curtos para descoberta entre clientes. Conexões com assinadores remotos agora funcionam via escaneamento de QR code sem configuração manual. A descoberta de perfis aborda um problema comum do Nostr: quando usuários migram entre relays sem trazer seus metadados, o Nostria localiza seu perfil e o republica nos relays atuais. Assinantes premium ganham integração com canais do YouTube, Memos privados, painéis de análise e backups automáticos de lista de seguidos com opções de mesclagem/restauração.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Mesclados:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - Corrigido o campo de retorno para o método &lt;code>nip44_encrypt&lt;/code> (&lt;a href="https://github.com/nostr-protocol/nips/pull/2184">#2184&lt;/a>). Assinadores Android agora devem retornar o payload criptografado no campo &lt;code>signature&lt;/code> (correspondendo ao &lt;code>nip44_decrypt&lt;/code>) em vez de um campo separado. Isso alinha a especificação com implementações existentes no Amber e Primal.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>PRs Abertos:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-50/">NIP-50&lt;/a>&lt;/strong> - Extensões de Expressões de Consulta (&lt;a href="https://github.com/nostr-protocol/nips/pull/2182">#2182&lt;/a>) propõe estender a busca do NIP-50 com expressões de consulta estruturadas. O PR adiciona operadores como &lt;code>kind:1&lt;/code>, &lt;code>author:npub1...&lt;/code> e combinações booleanas (&lt;code>AND&lt;/code>, &lt;code>OR&lt;/code>, &lt;code>NOT&lt;/code>), permitindo consultas de busca mais precisas além da simples correspondência de texto. Isso permitiria que clientes construíssem interfaces de busca avançada mantendo compatibilidade com strings de busca básicas.&lt;/li>
&lt;/ul>
&lt;h2 id="aprofundamento-em-nips-nip-04-e-nip-44">Aprofundamento em NIPs: NIP-04 e NIP-44&lt;/h2>
&lt;p>Esta semana cobrimos os padrões de criptografia do Nostr: o legado NIP-04 que você ainda encontrará, e sua substituição moderna NIP-44 que corrige falhas críticas de segurança.&lt;/p>
&lt;h3 id="nip-04pttopicsnip-04-mensagens-diretas-criptografadas-legado">&lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a>: Mensagens Diretas Criptografadas (Legado)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/04.md">NIP-04&lt;/a> foi a primeira tentativa do Nostr de mensageria criptografada, usando eventos kind 4. Embora simples de implementar, possui fraquezas de segurança conhecidas e está deprecado em favor do NIP-44.&lt;/p>
&lt;p>&lt;strong>Como funciona:&lt;/strong> O NIP-04 usa ECDH (Elliptic Curve Diffie-Hellman) para derivar um segredo compartilhado entre remetente e destinatário, depois criptografa com 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>O fluxo de criptografia:&lt;/p>
&lt;ol>
&lt;li>Computar ponto compartilhado: &lt;code>shared = ECDH(sender_privkey, recipient_pubkey)&lt;/code>&lt;/li>
&lt;li>Derivar chave: &lt;code>key = SHA256(shared_x_coordinate)&lt;/code>&lt;/li>
&lt;li>Gerar IV aleatório de 16 bytes&lt;/li>
&lt;li>Criptografar: &lt;code>ciphertext = AES-256-CBC(key, iv, plaintext)&lt;/code>&lt;/li>
&lt;li>Formatar conteúdo: &lt;code>base64(ciphertext)?iv=base64(iv)&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Problemas de segurança:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Sem autenticação:&lt;/strong> AES-CBC fornece confidencialidade mas não integridade. Um atacante que controla um relay poderia modificar bits do ciphertext, causando mudanças previsíveis no plaintext (ataques de bit-flipping).&lt;/li>
&lt;li>&lt;strong>IV em claro:&lt;/strong> O vetor de inicialização é transmitido junto com o ciphertext, e o modo CBC com IVs previsíveis permite ataques de plaintext escolhido.&lt;/li>
&lt;li>&lt;strong>Sem validação de padding:&lt;/strong> Implementações variam em como lidam com padding PKCS#7, potencialmente permitindo ataques de padding oracle.&lt;/li>
&lt;li>&lt;strong>Exposição de metadados:&lt;/strong> A pubkey do remetente, pubkey do destinatário e timestamp são todos visíveis para os relays.&lt;/li>
&lt;li>&lt;strong>Reutilização de chave:&lt;/strong> O mesmo segredo compartilhado é usado para todas as mensagens entre duas partes, para sempre.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Por que ainda existe:&lt;/strong> Muitos clientes e relays mais antigos suportam apenas NIP-04. Você o encontrará ao interagir com sistemas legados. Assinadores como Amber e aplicativos como Primal ainda implementam &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> para compatibilidade retroativa.&lt;/p>
&lt;h3 id="nip-44pttopicsnip-44-criptografia-versionada">&lt;a href="https://nostrcompass.org/pt/topics/nip-44/">NIP-44&lt;/a>: Criptografia Versionada&lt;/h3>
&lt;p>O &lt;a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44&lt;/a> é o padrão moderno de criptografia, projetado para corrigir as falhas conhecidas do NIP-04. Uma auditoria de segurança da Cure53 das implementações do NIP-44 identificou 10 problemas (incluindo ataques de timing e preocupações com forward secrecy) que foram abordados antes da especificação ser finalizada. Ele usa ChaCha20-Poly1305 com derivação de chave adequada e criptografia autenticada.&lt;/p>
&lt;p>&lt;strong>Principais melhorias sobre o 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">Cifra&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">Autenticação&lt;/td>
 &lt;td style="text-align: left">Nenhuma&lt;/td>
 &lt;td style="text-align: left">MAC Poly1305&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Derivação de chave&lt;/td>
 &lt;td style="text-align: left">SHA256(shared_x)&lt;/td>
 &lt;td style="text-align: left">HKDF com salt&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, padrão reutilizado&lt;/td>
 &lt;td style="text-align: left">Nonce aleatório de 24 bytes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Padding&lt;/td>
 &lt;td style="text-align: left">PKCS#7 (vaza tamanho)&lt;/td>
 &lt;td style="text-align: left">Preenchido para potência de 2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Versionamento&lt;/td>
 &lt;td style="text-align: left">Nenhum&lt;/td>
 &lt;td style="text-align: left">Prefixo de byte de versão&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Fluxo de criptografia:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Chave de conversa:&lt;/strong> Deriva uma chave estável para cada par remetente-destinatário:&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>Chaves de mensagem:&lt;/strong> Para cada mensagem, gera um nonce aleatório de 32 bytes e deriva chaves de criptografia/autenticação:&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>Preencher plaintext:&lt;/strong> Preenche até a próxima potência de 2 (mínimo 32 bytes) para ocultar o tamanho da mensagem:&lt;/p>
&lt;pre tabindex="0">&lt;code>padded = [length_u16_be] + [plaintext] + [zeros até próxima potência de 2]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Criptografar e 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>Formatar payload:&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 versão:&lt;/strong> O primeiro byte (&lt;code>0x02&lt;/code>) indica a versão da criptografia. Isso permite atualizações futuras sem quebrar mensagens existentes. A versão &lt;code>0x01&lt;/code> foi um rascunho anterior que nunca foi amplamente implantado.&lt;/p>
&lt;p>&lt;strong>Descriptografia:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Decodificar base64, verificar se o byte de versão é &lt;code>0x02&lt;/code>&lt;/li>
&lt;li>Extrair nonce (bytes 1-32), ciphertext e MAC (últimos 32 bytes)&lt;/li>
&lt;li>Derivar chave de conversa usando a chave privada do destinatário e a chave pública do remetente&lt;/li>
&lt;li>Derivar chaves de mensagem a partir da chave de conversa e nonce&lt;/li>
&lt;li>Verificar MAC antes de descriptografar (rejeitar se inválido)&lt;/li>
&lt;li>Descriptografar ciphertext, extrair prefixo de tamanho, retornar plaintext sem padding&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Propriedades de segurança:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Criptografia autenticada:&lt;/strong> O MAC Poly1305 garante que qualquer adulteração seja detectada antes da descriptografia&lt;/li>
&lt;li>&lt;strong>Forward secrecy (parcial):&lt;/strong> Cada mensagem usa um nonce único, então comprometer uma mensagem não revela outras. No entanto, comprometer uma chave privada ainda revela todas as mensagens passadas (sem ratcheting).&lt;/li>
&lt;li>&lt;strong>Ocultação de tamanho:&lt;/strong> Padding para potência de 2 obscurece o tamanho exato da mensagem&lt;/li>
&lt;li>&lt;strong>Resistência a ataques de timing:&lt;/strong> Comparação em tempo constante para verificação de MAC&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Uso na prática:&lt;/strong> O NIP-44 é a camada de criptografia para:&lt;/p>
&lt;ul>
&lt;li>Mensagens diretas privadas do &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> (dentro do gift wrap)&lt;/li>
&lt;li>Comunicação com assinador remoto do &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a>&lt;/li>
&lt;li>Criptografia de seal do &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>&lt;/li>
&lt;li>Mensagens de grupo do &lt;a href="https://nostrcompass.org/pt/topics/nip-104/">Marmot Protocol&lt;/a>, onde o NIP-44 envolve conteúdo criptografado por MLS usando uma chave derivada do segredo exportador MLS&lt;/li>
&lt;li>Qualquer aplicação que necessite criptografia segura ponto a ponto&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Orientação de migração:&lt;/strong> Novos aplicativos devem usar NIP-44 exclusivamente. Para compatibilidade retroativa, verifique se o cliente de um contato suporta NIP-44 (via metadados de app do &lt;a href="https://nostrcompass.org/pt/topics/nip-89/">NIP-89&lt;/a> ou suporte do relay) antes de recorrer ao NIP-04. Ao receber mensagens, tente primeiro a descriptografia NIP-44, depois recorra ao NIP-04 para conteúdo legado.&lt;/p>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;p>&lt;strong>Primal Android v2.6.18&lt;/strong> - O &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">lançamento completo&lt;/a> adiciona assinatura remota &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> e assinatura local &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, transformando o Primal em um hub de assinatura para outros aplicativos Android. Melhorias de desempenho incluem pré-cache de mídia, pré-cache de avatares e carregamento mais rápido de threads. Correções de bugs abordam auto-menções em bios, crashes na galeria de mídia e fallbacks de título de stream. No iOS, o Primal usa reprodução de áudio em segundo plano para manter o aplicativo ativo para receber solicitações de assinatura NIP-46; usuários podem alterar o som ou silenciá-lo completamente nas configurações.&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.6&lt;/strong> - O &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.6">último lançamento&lt;/a> da plataforma de negociação P2P de Bitcoin &lt;a href="https://nostrcompass.org/pt/topics/nip-69/">NIP-69&lt;/a> completa a implementação do fundo de desenvolvimento com eventos de auditoria da Fase 4. Pagamentos de taxa de desenvolvimento agora são rastreados via eventos Nostr kind 38383 publicados após cada pagamento bem-sucedido, permitindo verificação de terceiros e análises. Os cálculos de valores foram corrigidos para mensagens de comprador/vendedor, e a lógica de premium foi alinhada com a implementação de referência do lnp2pbot.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.5&lt;/strong> - O assinador multiplataforma &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.5">adiciona modo escuro&lt;/a>, exibição melhorada de ícones de aplicativo e layouts de UI mais limpos. Correções de bugs abordam conflitos com o iCloud Private Relay do iOS e problemas de parsing de eventos. O lançamento também melhora como o JSON de eventos é passado para a função de assinatura Rust.&lt;/p>
&lt;p>&lt;strong>Citrine v1.0.0&lt;/strong> - O aplicativo de relay Android &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v1.0.0">atinge a versão 1.0&lt;/a>. O Citrine permite executar um relay Nostr pessoal diretamente no seu dispositivo Android, útil para cache local, backup ou como complemento NIP-55. Este lançamento adiciona um handler de relatório de crash, melhora a eficiência de consultas ao banco de dados e atualiza traduções via Crowdin.&lt;/p>
&lt;p>&lt;strong>Applesauce v5.0.0&lt;/strong> - A suíte de bibliotecas TypeScript do hzrd149 &lt;a href="https://github.com/hzrd149/applesauce/releases">lança uma versão major&lt;/a> com breaking changes focadas em correção e simplicidade. O pacote core agora &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.0.0">verifica assinaturas de eventos por padrão&lt;/a> e renomeia métodos de coordenadas para usar terminologia mais clara de &amp;ldquo;address&amp;rdquo; (&lt;code>parseCoordinate&lt;/code> -&amp;gt; &lt;code>parseReplaceableAddress&lt;/code>). O pacote relay &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-relay%405.0.0">reduz tentativas padrão de 10 para 3&lt;/a> e ignora relays inalcançáveis por padrão, além de adicionar &lt;code>createUnifiedEventLoader&lt;/code> para busca de eventos simplificada. O pacote wallet ganha &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet%405.0.0">descoberta de mint Cashu&lt;/a> do &lt;a href="https://nostrcompass.org/pt/topics/nip-87/">NIP-87&lt;/a>. Dependências diretas do &lt;code>nostr-tools&lt;/code> foram removidas dos pacotes, reduzindo tamanho do bundle e conflitos de versão.&lt;/p>
&lt;h2 id="mudanças-notáveis-de-código-e-documentação">Mudanças notáveis de código e documentação&lt;/h2>
&lt;p>&lt;em>Estes são pull requests abertos e trabalho em estágio inicial, perfeitos para obter feedback antes de serem mesclados. Se algo chamar sua atenção, considere revisar ou comentar!&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>Uma série de PRs melhora a experiência de artigos longos. &lt;a href="https://github.com/damus-io/damus/pull/3496">Melhorias de UX de leitura&lt;/a> adicionam uma barra de progresso, tempo estimado de leitura, modo sépia, altura de linha ajustável e modo de foco que oculta a navegação durante a rolagem. &lt;a href="https://github.com/damus-io/damus/pull/3489">Correções de imagem&lt;/a> garantem que imagens em conteúdo markdown sejam exibidas com proporções adequadas, pré-processando imagens isoladas como elementos de nível de bloco. &lt;a href="https://github.com/damus-io/damus/pull/3497">Cards de preview de artigos longos&lt;/a> substituem texto inline &lt;code>@naddr1...&lt;/code> por cards de preview ricos mostrando título e metadados do artigo. Uma nova &lt;a href="https://github.com/damus-io/damus/pull/3508">suíte de testes de integração de relay&lt;/a> adiciona 137 testes relacionados à rede, incluindo verificação do protocolo &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a> e comportamento sob condições de rede degradadas (simulação 3G).&lt;/p>
&lt;h3 id="bitchat-mensageria-criptografada">Bitchat (Mensageria Criptografada)&lt;/h3>
&lt;p>Fortalecimento de segurança no mensageiro iOS Nostr+Cashu. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">Limpeza de segredo DH do protocolo Noise&lt;/a> corrige seis locais onde segredos compartilhados não estavam sendo zerados após acordo de chave Diffie-Hellman, restaurando garantias de forward secrecy. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">Thread safety para filas de confirmação de leitura&lt;/a> adiciona sincronização de barreira para prevenir condições de corrida no NostrTransport. &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">Otimização do deduplicador de mensagens&lt;/a> melhora o desempenho com altos volumes de mensagens, e &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">hardening de parsing de string hexadecimal&lt;/a> previne crashes de entrada malformada.&lt;/p>
&lt;h3 id="frostr-assinatura-por-threshold">Frostr (Assinatura por Threshold)&lt;/h3>
&lt;p>O protocolo de assinatura por threshold baseado em &lt;a href="https://nostrcompass.org/pt/topics/frost/">FROST&lt;/a> &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/pull/62">adicionou exibição de QR code&lt;/a> para credenciais de grupo e credenciais de share durante o onboarding e na interface do assinador. Isso permite configuração mais fácil ao distribuir shares de chave entre múltiplos dispositivos, permitindo que usuários escaneiem credenciais em vez de copiar manualmente strings longas.&lt;/p>
&lt;h3 id="marmot-mdk-biblioteca">Marmot mdk (Biblioteca)&lt;/h3>
&lt;p>Além das correções de segurança mencionadas acima, PRs ativos abordam descobertas restantes da auditoria: &lt;a href="https://github.com/marmot-protocol/mdk/pull/109">Tipo Secret&lt;T> para zeroização&lt;/a> introduz um tipo wrapper que automaticamente zera dados sensíveis ao ser descartado, &lt;a href="https://github.com/marmot-protocol/mdk/pull/111">paginação de consulta de mensagens&lt;/a> previne esgotamento de memória ao carregar histórico de chat, e &lt;a href="https://github.com/marmot-protocol/mdk/pull/102">armazenamento criptografado&lt;/a> adiciona criptografia em repouso para o banco de dados SQLite que armazena estado do grupo e mensagens.&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>Uma semana movimentada de correções de estabilidade no cliente Android. &lt;a href="https://github.com/vitorpamplona/amethyst/commit/2c42796">Parsing JSON leniente&lt;/a> previne crashes de eventos malformados tornando a serialização Kotlin mais tolerante. A validação de eventos agora &lt;a href="https://github.com/vitorpamplona/amethyst/commit/40f9622">verifica o tamanho do campo kind&lt;/a> antes do processamento para evitar exceções de valores oversized. A UI de score de confiança ganhou um ícone menor para reduzir interferência visual, e &lt;a href="https://github.com/vitorpamplona/amethyst/commit/69c53ac">logging de erros melhorado&lt;/a> ajuda a diagnosticar problemas de conexão com relays. Atualizações de tradução chegaram via Crowdin, e vários avisos do SonarQube foram tratados.&lt;/p>
&lt;h3 id="tenex-agentes-de-ia">TENEX (Agentes de IA)&lt;/h3>
&lt;p>O framework de agentes de IA nativo do Nostr teve 81 commits esta semana desenvolvendo capacidades autônomas. O novo &lt;a href="https://github.com/tenex-chat/tenex/pull/48">sistema de supervisão de agentes&lt;/a> implementa heurísticas comportamentais para monitorar ações de agentes e intervir quando necessário. &lt;a href="https://github.com/tenex-chat/tenex/commit/b244c10">Transparência de delegação&lt;/a> adiciona logging de intervenção do usuário aos transcripts de delegação, para que usuários possam auditar o que os agentes fizeram em seu nome. O &lt;a href="https://github.com/tenex-chat/tenex/pull/47">registro de provedores LLM&lt;/a> foi modularizado para integração mais fácil de diferentes backends de IA. Suporte a conversas entre projetos permite que agentes mantenham contexto através de múltiplos projetos baseados em Nostr.&lt;/p>
&lt;h3 id="jumble-cliente-web">Jumble (Cliente Web)&lt;/h3>
&lt;p>O cliente web focado em relays adicionou várias melhorias de experiência do usuário. &lt;a href="https://github.com/CodyTseng/jumble/commit/695f2fe">Pool de relay inteligente&lt;/a> gerencia conexões de forma inteligente com base em padrões de uso. &lt;a href="https://github.com/CodyTseng/jumble/commit/917fcd9">Toggle de feed ao vivo&lt;/a> permite que usuários alternem entre streaming em tempo real e atualização manual. &lt;a href="https://github.com/CodyTseng/jumble/commit/d1b3a8c">Auto-mostrar novas notas&lt;/a> no topo exibe conteúdo fresco sem exigir recarregamento da página. &lt;a href="https://github.com/CodyTseng/jumble/commit/fd9f41c">Cache persistente&lt;/a> para feed de seguidos e notificações melhora os tempos de carregamento em visitas de retorno. Usuários agora podem &lt;a href="https://github.com/CodyTseng/jumble/commit/53a67d8">alterar relays padrão&lt;/a> através das configurações.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo para esta semana. Está construindo algo? Tem notícias para compartilhar? Quer que cobramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via DM NIP-17&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #3</title><link>https://nostrcompass.org/pt/newsletters/2025-12-31-newsletter/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2025-12-31-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal do ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ao encerrar 2025, olhamos para trás para cinco anos de marcos de dezembro na evolução do Nostr. Desde o primeiro lançamento do cliente de fiatjaf em dezembro de 2020, passando pela doação fundamental de Jack Dorsey de 14 BTC em dezembro de 2022, até a proliferação de NIP-55 signer este mês e a aceleração de cache de 162x do NDK, dezembro consistentemente marcou pontos de virada para o protocolo. Esta edição especial traça a história técnica através de cada dezembro, documentando o crescimento do protocolo de dois relays experimentais para mais de 2.500 nós em 50 países. Além disso: O módulo desktop do Amethyst toma forma através do Quartz, Notedeck ganha mensagens, Citrine hospeda aplicações web, e NIP-54 corrige a internacionalização para scripts não latinos.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal do ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Ao encerrar 2025, olhamos para trás para cinco anos de marcos de dezembro na evolução do Nostr. Desde o primeiro lançamento do cliente de fiatjaf em dezembro de 2020, passando pela doação fundamental de Jack Dorsey de 14 BTC em dezembro de 2022, até a proliferação de NIP-55 signer este mês e a aceleração de cache de 162x do NDK, dezembro consistentemente marcou pontos de virada para o protocolo. Esta edição especial traça a história técnica através de cada dezembro, documentando o crescimento do protocolo de dois relays experimentais para mais de 2.500 nós em 50 países. Além disso: O módulo desktop do Amethyst toma forma através do Quartz, Notedeck ganha mensagens, Citrine hospeda aplicações web, e NIP-54 corrige a internacionalização para scripts não latinos.&lt;/p>
&lt;h2 id="resumo-de-dezembro-cinco-anos-de-dezembros-do-nostr">Resumo de Dezembro: Cinco Anos de Dezembros do Nostr&lt;/h2>
&lt;p>Nostr completa cinco anos este ano. fiatjaf iniciou o protocolo em 7 de novembro de 2020, e cada dezembro desde então marcou uma fase distinta em sua evolução: de prova de conceito a movimento global a ecossistema de produção. Este é um retrospectivo técnico de dezembro de 2020 até dezembro de 2025, os anos formativos que estabeleceram a fundação do Nostr e catalisaram seu momento de explosão.&lt;/p>
&lt;h3 id="dezembro-2020-gênese">Dezembro 2020: Gênese&lt;/h3>
&lt;p>O primeiro mês completo de existência do Nostr viu fiatjaf lançar &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>, o primeiro cliente do protocolo, construído com Quasar (Vue.js) e absurd-sql para armazenamento local. fiatjaf já havia estabelecido a arquitetura central: usuários identificados por chaves públicas secp256k1, todas as postagens assinadas criptograficamente, relays servindo como armazenamento simples que não se comunicam entre si. Um ou dois relays experimentais serviam um punhado de primeiros adotantes coordenando no grupo do Telegram &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a>, que foi lançado em 16 de novembro. A &lt;a href="https://fiatjaf.com/nostr.html">documentação original&lt;/a> descrevia &amp;ldquo;o protocolo aberto mais simples que é capaz de criar uma rede social global resistente à censura&amp;rdquo;, uma premissa que levaria mais dois anos para ser provada.&lt;/p>
&lt;h3 id="dezembro-2021-desenvolvimento-inicial">Dezembro 2021: Desenvolvimento Inicial&lt;/h3>
&lt;p>Em 31 de dezembro de 2021, Nostr chegou à &lt;a href="https://news.ycombinator.com/item?id=29749061">primeira página do Hacker News&lt;/a> com 110 pontos e 138 comentários, submetido por Cameri. Isso marcou a primeira exposição significativa do protocolo à comunidade mais ampla de desenvolvedores. A rede funcionava com aproximadamente sete relays com menos de 1.000 usuários. Branle recebeu atualizações incluindo importação de chave privada (31 de dezembro) e suporte multi-relay. Um cliente de linha de comando, noscl, fornecia interação baseada em terminal. As especificações do protocolo existiam na documentação de fiatjaf, embora o &lt;a href="https://github.com/nostr-protocol/nips">repositório formal de NIPs&lt;/a> não fosse criado até maio de 2022. O protocolo era, como fiatjaf descreveu, &amp;ldquo;um trabalho em progresso&amp;rdquo;.&lt;/p>
&lt;h3 id="dezembro-2022-o-ponto-de-virada">Dezembro 2022: O Ponto de Virada&lt;/h3>
&lt;p>Dezembro de 2022 transformou Nostr de um experimento de nicho em um movimento mainstream. O catalisador veio em 15 de dezembro, quando Jack Dorsey doou &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) para fiatjaf após descobrir o protocolo e declarar que era &amp;ldquo;100 por cento o que queríamos do Bluesky, mas não foi desenvolvido por uma empresa&amp;rdquo;. Em 16 de dezembro, fiatjaf anunciou a divisão de fundos com o desenvolvedor do Damus William Casarin (jb55), e Dorsey verificou sua conta Nostr (npub: &lt;code>npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&lt;/code>). O financiamento legitimou o projeto da noite para o dia.&lt;/p>
&lt;p>Na mesma semana, o caos do Twitter acelerou a adoção. De 14 a 15 de dezembro houve suspensões de jornalistas proeminentes do New York Times, CNN e Washington Post. Em 18 de dezembro, o Twitter &lt;a href="https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/">anunciou banimentos&lt;/a> de contas promovendo Nostr, Mastodon e outras plataformas. A política foi revertida no dia seguinte após reação negativa. O êxodo levou os usuários a explorar alternativas.&lt;/p>
&lt;p>O desenvolvimento do protocolo acelerou. Em 16 de dezembro, &lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> foi mesclado (&lt;a href="https://github.com/nostr-protocol/nips/pull/57">#57&lt;/a>), introduzindo identificadores codificados em bech32 (npub, nsec, note, nprofile, nevent) que tornavam as chaves legíveis por humanos e distinguíveis. O repositório de NIPs registrou mais de 36 commits naquele mês, incluindo atualizações de NIP-40 e NIP-07. Os clientes proliferaram: Damus preencheu seu beta TestFlight em horas, Astral bifurcou Branle para criação de perfis, Snort foi lançado como um cliente web &amp;ldquo;rápido e resistente à censura&amp;rdquo;, e Vitor Pamplona começou o desenvolvimento do Amethyst. Alby v1.22.1 &amp;ldquo;Kemble&amp;rsquo;s Cascade of Stars&amp;rdquo; foi lançado em 22 de dezembro com suporte a NIP-19. Até 7 de dezembro, Nostr tinha aproximadamente 800 usuários com perfis; quando Damus chegou à App Store em 31 de janeiro de 2023, as comportas se abriram, impulsionando o crescimento para mais de 315.000 usuários até junho de 2023.&lt;/p>
&lt;h3 id="dezembro-2023-maturação-do-ecossistema">Dezembro 2023: Maturação do Ecossistema&lt;/h3>
&lt;p>Dezembro de 2023 marcou um ponto de inflexão crítico para a segurança do protocolo Nostr. Em 20 de dezembro, a &lt;a href="https://github.com/nostr-protocol/nips/pull/746">revisão 3 do NIP-44 foi mesclada&lt;/a> após uma auditoria de segurança independente da Cure53 (NOS-01) que identificou 10 problemas nas implementações TypeScript, Go e Rust, incluindo ataques de timing e preocupações de forward secrecy. A especificação atualizada substituiu a criptografia defeituosa do &lt;a href="https://nostrcompass.org/pt/topics/nip-04/">NIP-04&lt;/a> por ChaCha20 e HMAC-SHA256, estabelecendo a fundação criptográfica que agora sustenta os DMs privados do &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> e o gift wrapping do &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a>. Na mesma semana, &lt;a href="https://opensats.org/blog/nostr-grants-december-2023">OpenSats anunciou sua quarta onda de grants&lt;/a> em 21 de dezembro, financiando sete projetos incluindo Lume, noStrudel, ZapThreads, e uma auditoria independente do NIP-44. Isso seguiu a &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">primeira onda em julho de 2023&lt;/a> que havia financiado Damus, Coracle, Iris, e outros, trazendo a alocação total do Fundo Nostr para aproximadamente $3,4 milhões através de 39 grants.&lt;/p>
&lt;p>O mês também expôs tensões de sustentabilidade no ecossistema. Em 28 de dezembro, William Casarin (jb55) &lt;a href="https://stacker.news/items/368863">postou no Stacker News&lt;/a> que 2024 seria &amp;ldquo;provavelmente o último ano do Damus&amp;rdquo;, citando que &amp;ldquo;clientes nostr não geram dinheiro&amp;rdquo; após as restrições da Apple sobre zaps in-app limitarem severamente o potencial de receita. A equipe do Damus havia anteriormente rejeitado financiamento de VC. Enquanto isso, &lt;a href="https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1">Nostr Wallet Connect v0.4.1&lt;/a> foi lançado em 26 de dezembro, estendendo &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> com 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>, e &lt;code>get_info&lt;/code>, preparando o terreno para as integrações de wallets que se tornariam padrão em todos os clientes.&lt;/p>
&lt;h3 id="dezembro-2024-avanço-do-protocolo">Dezembro 2024: Avanço do Protocolo&lt;/h3>
&lt;p>Dezembro de 2024 abriu com o &lt;a href="https://damus.io/notedeck/">lançamento Alpha do Notedeck&lt;/a> em 30 de novembro, o cliente desktop baseado em Rust da equipe Damus com uma interface multi-coluna com suporte para múltiplas contas. Construído para Linux, macOS e Windows (Android planejado para 2025), Notedeck foi inicialmente enviado para assinantes do Damus Purple e representou uma expansão estratégica além do iOS. Duas semanas depois, &lt;a href="https://opensats.org/blog/9th-wave-of-nostr-grants">OpenSats anunciou sua nona onda de grants&lt;/a> em 16 de dezembro, financiando AlgoRelay (o primeiro relay algorítmico para feeds personalizados), Pokey (app Android com mesh Bluetooth para internet restrita), Nostr Safebox (armazenamento de tokens Cashu com &lt;a href="https://nostrcompass.org/pt/topics/nip-60/">NIP-60&lt;/a>), e LumiLumi (cliente web leve e acessível), levando a alocação total do Fundo Nostr para aproximadamente $9 milhões, um aumento de 67% ano a ano.&lt;/p>
&lt;p>O mês viu maturação significativa de clientes em todo o ecossistema. &lt;a href="https://github.com/mikedilger/gossip/releases/tag/v0.13.0">Gossip 0.13.0&lt;/a> chegou em 23 de dezembro com suporte a File Metadata (&lt;a href="https://nostrcompass.org/pt/topics/nip-92/">NIP-92&lt;/a>/&lt;a href="https://nostrcompass.org/pt/topics/nip-94/">NIP-94&lt;/a>), integração Blossom, e busca em relay com &lt;a href="https://nostrcompass.org/pt/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> foi lançado em 12 de dezembro com onboarding reformulado e integração nostr-editor. O desenvolvimento do protocolo permaneceu ativo com 30 pull requests submetidos entre 9 e 22 de dezembro (10 mesclados), incluindo reescritas do &lt;a href="https://nostrcompass.org/pt/topics/nip-46/">NIP-46&lt;/a> para usar apenas criptografia NIP-44 e trabalho contínuo no &lt;a href="https://nostrcompass.org/pt/topics/nip-104/">NIP-104&lt;/a> para criptografia double ratchet no nível do Signal. Estatísticas de rede mostraram mais de 224.000 eventos diários de pubkeys confiáveis, crescimento de 4x ano a ano em novos perfis com listas de contatos, e um aumento de 50% em eventos de escrita pública.&lt;/p>
&lt;h3 id="dezembro-2025-expansão-do-ecossistema">Dezembro 2025: Expansão do Ecossistema&lt;/h3>
&lt;p>Dezembro de 2025 trouxe maturação contínua do protocolo e expansão do ecossistema. Em 21 de dezembro, &lt;a href="https://opensats.org/blog/fourteenth-wave-of-nostr-grants">OpenSats anunciou sua décima quarta onda de grants Nostr&lt;/a>, financiando três projetos: YakiHonne (um cliente multiplataforma com portal de criadores para conteúdo de formato longo e integração de pagamentos Cashu/Nutzaps), Quartz (biblioteca Kotlin Multiplatform de Vitor Pamplona que alimenta Amethyst e permitirá uma versão iOS), e Nostr Feedz (integração bidirecional RSS-para-Nostr por PlebOne). Renovações de grants foram para Dart NDK e nostr-relay de Mattn.&lt;/p>
&lt;p>A evolução do protocolo continuou com &lt;a href="https://nostrcompass.org/pt/topics/nip-be/">NIP-BE&lt;/a> (mensagens Bluetooth Low Energy, &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>) mesclado em novembro, habilitando sincronização offline de dispositivos. &lt;a href="https://nostrcompass.org/pt/topics/nip-a4/">NIP-A4&lt;/a> (Mensagens Públicas, kind 24, &lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>) chegou mais tarde no mês, definindo mensagens de tela de notificação que usam tags &lt;code>q&lt;/code> para evitar complicações de threading. &lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a> recebeu grande clarificação (&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>), introduzindo a tag &lt;code>hidden&lt;/code> para grupos verdadeiramente privados e não descobríveis. A especificação do &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> também viu refinamento (&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>), abordando um erro comum de implementação onde desenvolvedores chamavam &lt;code>get_public_key&lt;/code> de processos em segundo plano.&lt;/p>
&lt;p>No lado do cliente, &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/#news">Primal Android se tornou um signer NIP-55 completo&lt;/a> através de oito PRs mesclados implementando &lt;code>LocalSignerContentProvider&lt;/code>, juntando-se a Amber e Aegis como opções de assinatura no Android. A &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes">biblioteca NDK alcançou consultas de cache 162x mais rápidas&lt;/a> (de ~3.690ms para ~22ms) eliminando escritas duplicadas e buscas desnecessárias de cache 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 introduziu &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/#news">Zapsnags&lt;/a> para vendas relâmpago via zaps. White Noise lançou notificações push que preservam a privacidade com &lt;a href="https://nostrcompass.org/pt/topics/mip-05/">MIP-05&lt;/a>. Veja &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/">Newsletter #1&lt;/a> e &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/">Newsletter #2&lt;/a> para cobertura completa.&lt;/p>
&lt;hr>
&lt;p>Cinco anos atrás, fiatjaf lançou Branle para um punhado de usuários através de dois relays experimentais. Hoje, o protocolo suporta mais de 140 clientes, mais de 2.500 relays em 50 países, e uma crescente rede de confiança ligando centenas de milhares de keypairs. O padrão de dezembro de grandes lançamentos continuou este mês com mensagens Bluetooth, proliferação de signers no Android, e grants de infraestrutura sinalizando investimento sustentado em ferramentas multiplataforma.&lt;/p>
&lt;h2 id="notícias">Notícias&lt;/h2>
&lt;p>&lt;strong>Amethyst Desktop Toma Forma&lt;/strong> - O grant do Quartz da décima quarta onda do OpenSats já está produzindo resultados. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1625">PR #1625&lt;/a> cria um módulo &lt;code>:desktopApp&lt;/code> completo para Amethyst usando Compose Multiplatform, com telas de login e feed global funcionais no Desktop JVM. A arquitetura converte o módulo &lt;code>:commons&lt;/code> para Kotlin Multiplatform com uma estrutura de source set limpa (&lt;code>commonMain&lt;/code>, &lt;code>jvmAndroid&lt;/code>, &lt;code>androidMain&lt;/code>, &lt;code>jvmMain&lt;/code>), permitindo componentes de UI compartilhados entre Android e desktop enquanto deixa decisões específicas de plataforma para cada target. Isso estabelece a fundação para a eventual versão iOS através da mesma abordagem Kotlin Multiplatform.&lt;/p>
&lt;p>&lt;strong>Amethyst Respostas de Voz&lt;/strong> - Uma entrega de Natal de davotoula: &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1622">PR #1622&lt;/a> adiciona telas dedicadas de resposta de voz com visualização de forma de onda, suporte para regravar, seleção de servidor de mídia, e indicadores de progresso de upload. Usuários agora podem responder tanto a mensagens de voz raiz quanto a respostas de voz com áudio.&lt;/p>
&lt;p>&lt;strong>Notedeck Adiciona Mensagens&lt;/strong> - Notedeck, o cliente desktop do Damus, ganhou um recurso de mensagens em &lt;a href="https://github.com/damus-io/notedeck/pull/1223">PR #1223&lt;/a>, expandindo além da navegação do timeline para comunicação direta.&lt;/p>
&lt;p>&lt;strong>Citrine Hospeda Aplicações Web&lt;/strong> - Citrine agora pode &lt;a href="https://github.com/greenart7c3/Citrine/pull/81">hospedar aplicações web&lt;/a>, transformando seu telefone em um servidor web Nostr local-first. Um &lt;a href="https://github.com/greenart7c3/Citrine/pull/85">PR #85&lt;/a> separado adiciona reconexão automática e broadcasting de eventos quando a conectividade de rede retorna, com cobertura de testes abrangente através dos níveis de API do Android.&lt;/p>
&lt;p>&lt;strong>Registro de Kits de Desenvolvimento Nostrability&lt;/strong> - O rastreador de &lt;a href="https://github.com/nostrability/nostrability/issues/264">Developer Kits &amp;amp; Tooling&lt;/a> mantém um registro curado de SDKs, bibliotecas e ferramentas de desenvolvimento através de linguagens (TypeScript, Rust, Python, Go, Dart, Swift, e mais). Se você é novo no desenvolvimento Nostr, este é um ponto de partida útil para encontrar o toolkit certo para seu stack.&lt;/p>
&lt;h2 id="atualizações-de-nips">Atualizações de NIPs&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-54/">NIP-54&lt;/a>&lt;/strong> - Correção crítica de internacionalização para normalização de d-tag wiki (&lt;a href="https://github.com/nostr-protocol/nips/pull/2177">#2177&lt;/a>). Regras anteriores convertiam todos os caracteres não ASCII para &lt;code>-&lt;/code>, quebrando suporte para japonês, chinês, árabe, cirílico e outros scripts. A especificação atualizada preserva letras UTF-8, aplica minúsculas apenas a caracteres com variantes de maiúsculas, e inclui exemplos abrangentes: &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 torna &lt;code>&amp;quot;москва&amp;quot;&lt;/code>, e scripts mistos como &lt;code>&amp;quot;日本語 Article&amp;quot;&lt;/code> normalizam para &lt;code>&amp;quot;日本語-article&amp;quot;&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h2 id="lançamentos">Lançamentos&lt;/h2>
&lt;p>&lt;strong>Zapstore 1.0-rc1&lt;/strong> - A loja de aplicativos sem permissões baseada em Nostr lança o &lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0-rc1">primeiro release candidate&lt;/a> de sua nova arquitetura, apresentando uma atualização completa de UI, gerenciador de pacotes reescrito com melhor tratamento de erros, App Stacks para descoberta curada, telas de perfil redesenhadas, verificação de atualizações em segundo plano, e rolagem infinita em listas de lançamentos.&lt;/p>
&lt;p>&lt;strong>KeyChat v1.38.1&lt;/strong> - O app de mensagens criptografadas baseado em MLS &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489">adiciona suporte UnifiedPush&lt;/a> para notificações push de Android e Linux, mais autenticação biométrica para operações de privacidade. Disponível para Android, Windows, macOS e Linux.&lt;/p>
&lt;p>&lt;strong>Alby Go v2.0.0&lt;/strong> - O companheiro de wallet Lightning móvel &lt;a href="https://github.com/getAlby/go/releases/tag/v2.0.0">lança um redesign visual&lt;/a> com novo logo, paleta de cores atualizada, agenda de endereços redesenhada, e teclado de entrada de valores melhorado. BTC Map agora é acessível da tela inicial, e descrições de transações aparecem em notificações.&lt;/p>
&lt;p>&lt;strong>nak v0.17.4&lt;/strong> - A ferramenta de linha de comando Nostr de fiatjaf &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.4">lançada&lt;/a>, seguindo a correção de restrição LMDB Linux da v0.17.3 da semana passada.&lt;/p>
&lt;h2 id="mudanças-notáveis-de-código-e-documentação">Mudanças notáveis de código e documentação&lt;/h2>
&lt;p>&lt;em>Pull requests abertos e trabalho em estágio inicial que vale a pena acompanhar.&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 busca de eventos. Quando usuários abrem links nevent, nprofile ou naddr, Damus agora extrai relay hints dos dados TLV bech32 e se conecta a relays efêmeros para buscar conteúdo que não está no pool de relays do usuário. A implementação inclui limpeza com contagem de referências para prevenir condições de corrida durante buscas concorrentes. &lt;a href="https://github.com/damus-io/damus/pull/3474">Detecção de URL de imagem&lt;/a> converte automaticamente URLs de imagem coladas em miniaturas de preview no compositor, com badge de posição de carrossel para múltiplas imagens. &lt;a href="https://github.com/damus-io/damus/pull/3473">Conversão de colagem npub&lt;/a> transforma strings npub/nprofile coladas em links de menção com resolução de perfil assí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> adiciona uma interface de evento para splits de zap NIP-57, permitindo que posts especifiquem múltiplos destinatários que compartilham zaps recebidos (útil para colaborações, divisão de receita, ou dar gorjetas tanto para criadores de conteúdo quanto para as ferramentas que eles usam). &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1624">Documentação de paridade de recursos Quartz&lt;/a> adiciona uma tabela detalhada rastreando quais recursos estão implementados através dos targets Android, Desktop JVM e iOS, notando que iOS está faltando criptografia central (&lt;code>Secp256k1Instance&lt;/code>), serialização JSON e estruturas de dados.&lt;/p>
&lt;h3 id="notedeck-desktop">Notedeck (Desktop)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1226">Reconstrução de filtro de timeline&lt;/a> corrige um bug onde contas deixadas de seguir continuavam aparecendo em feeds. Filtros de timeline eram construídos uma vez da lista de contatos e nunca atualizados; a correção adiciona rastreamento de &lt;code>contact_list_timestamp&lt;/code> e um método &lt;code>invalidate()&lt;/code> para acionar reconstruções quando o estado de seguimento muda.&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> expõe o banco de dados de eventos do relay local para outros apps Android via &lt;code>ContentResolver&lt;/code>. Diferente da interface WebSocket (que requer que apps mantenham uma conexão persistente e falem o protocolo relay Nostr), ContentProvider oferece acesso direto síncrono ao banco de dados através do mecanismo IPC nativo do Android. Apps externos podem consultar eventos por ID, pubkey, kind ou intervalo de datas, inserir novos eventos com validação, e deletar eventos sem gerenciar conexões 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">Suporte NIP-40 em nível de relay&lt;/a> adiciona tratamento de expiração no nível do relay builder. Eventos expirados agora são rejeitados antes do armazenamento e filtrados antes de enviar para clientes, eliminando a necessidade de cada implementação de banco de dados tratar verificações de expiração independentemente.&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 funcionalidade de espelhamento de blobs para a ferramenta de linha de comando.&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> adiciona trilhas de auditoria transparentes para pagamentos ao fundo de desenvolvimento através de eventos Nostr kind 8383. A implementação publica eventos de auditoria não bloqueantes após pagamentos de fees bem-sucedidos, incluindo detalhes de ordem e hashes de pagamento enquanto exclui pubkeys de comprador/vendedor por privacidade.&lt;/p>
&lt;h3 id="mdk-marmot-development-kit">MDK (Marmot Development Kit)&lt;/h3>
&lt;p>Três correções de auditoria de segurança chegaram: &lt;a href="https://github.com/marmot-protocol/mdk/pull/40">Verificação de autor&lt;/a> força que pubkeys de rumor correspondam às credenciais do remetente MLS, prevenindo ataques de impersonação. &lt;a href="https://github.com/marmot-protocol/mdk/pull/41">KeyPackage identity binding&lt;/a> verifica que a identidade da credencial corresponda aos assinantes de eventos. &lt;a href="https://github.com/marmot-protocol/mdk/pull/42">Validação de atualização de admin&lt;/a> previne conjuntos de admin vazios e atribuições de admin a não membros.&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 um sistema de pagamento que minimiza confiança para bens físicos. A arquitetura usa &lt;code>makeHoldInvoice&lt;/code> do Alby para bloquear fundos do comprador em sua própria wallet, com liquidação acionada apenas após verificação de inventário do comerciante. O protocolo de handshake flui através de DMs criptografados &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a>: comprador envia solicitação de pedido, comerciante responde com HODL invoice, comprador paga (fundos bloqueados), comerciante confirma estoque e envio, então a liquidação libera os fundos. Suporte de carrinho multi-comerciante divide pagamentos 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 descoberta por relay&lt;/a> adiciona um toggle para ocultar posts de usuários seguidos em relays específicos, habilitando feeds de descoberta baseados em idioma (ex., nostr.band/lang/*). O recurso filtra posts onde o pubkey do autor aparece na lista de seguidos do usuário, persistindo o estado do toggle por URL de relay no 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">Retry de upload de mídia&lt;/a> adiciona opções de retry para uploads falhos. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/927">Avisos de edição de perfil&lt;/a> alerta usuários sobre mudanças de perfil. No backend, &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/422">whitenoise-rs&lt;/a> corrige uma condição de corrida na criação 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">Reescrita v3&lt;/a> migra para Bun para o monorepo e servidor, adiciona suporte SQLite, remove compatibilidade v1, implementa LUD-21, e adiciona atualizações de mint quote em tempo 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> lança refatorações de tratamento WebSocket e robustez de testes melhorada através de &lt;a href="https://github.com/tcheeric/nostr-java/pull/499">dois 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">Migração NIP-54 para Djot&lt;/a> propõe uma mudança separada para a especificação wiki: mudar o formato de conteúdo de Asciidoc para Djot, uma linguagem de marcação leve com sintaxe mais limpa. O PR introduz links de estilo referência para wikilinks, tornando referências cruzadas entre artigos wiki mais legíveis na forma fonte. &lt;a href="https://github.com/nostr-protocol/nips/pull/2179">NIP-XX Quorum&lt;/a> introduz governança de multi-assinatura threshold para grupos Nostr usando FROST (Flexible Round-Optimized Schnorr Threshold signatures). Um Quorum é um nsec compartilhado entre membros através de um esquema T-de-N onde membros podem representar a si mesmos ou delegar a um conselho de representantes. Quando o conselho muda, o nsec antigo se torna obsoleto e um novo é distribuído—o ato final de qualquer conselho é assinar o evento de transição de governança. A especificação define membresía (pública ou privada), eleições e enquetes (votos populares, votos de desconfiança), &amp;ldquo;leis&amp;rdquo; opcionais em linguagem natural, e crucialmente, ontologias de quorum onde quorums podem ser membros de outros quorums, habilitando estruturas hierárquicas como localidades se juntando a corpos regionais. Casos de uso abrangem desenvolvimento de código fonte, conselhos de empresas, HOAs, e comunidades moderadas.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo por esta semana e este ano. Construindo algo? Tem notícias para compartilhar? Quer que cubramos seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via NIP-17 DM&lt;/a> ou encontre-nos no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #2</title><link>https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2025-12-24-newsletter/</guid><description>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal do ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Três implementações de assinadores &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> recebem atualizações: Amber adiciona cache de performance, Aegis ganha suporte a URI &lt;code>nostrsigner:&lt;/code>, e Primal Android se junta a eles como um assinador local completo. Shopstr introduz &amp;ldquo;Zapsnags&amp;rdquo; para vendas relâmpago via zaps. Mostro adiciona um fundo de desenvolvimento. Quatro atualizações de NIP chegam incluindo Mensagens Públicas (kind 24) e melhorias de privacidade de grupos. Consultas de cache do NDK aceleram 162x, Applesauce adiciona reações e suporte a carteira NIP-60, e Tenex introduz arquitetura RAL para delegação de agentes IA. Em nosso aprofundamento, explicamos &lt;a href="https://nostrcompass.org/pt/topics/nip-02/">NIP-02&lt;/a> (listas de seguidos) e &lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10&lt;/a> (threading de respostas), especificações fundamentais para construir timelines sociais e conversas.&lt;/p></description><content:encoded>&lt;p>Bem-vindo de volta ao Nostr Compass, seu guia semanal do ecossistema do protocolo Nostr.&lt;/p>
&lt;p>&lt;strong>Esta semana:&lt;/strong> Três implementações de assinadores &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> recebem atualizações: Amber adiciona cache de performance, Aegis ganha suporte a URI &lt;code>nostrsigner:&lt;/code>, e Primal Android se junta a eles como um assinador local completo. Shopstr introduz &amp;ldquo;Zapsnags&amp;rdquo; para vendas relâmpago via zaps. Mostro adiciona um fundo de desenvolvimento. Quatro atualizações de NIP chegam incluindo Mensagens Públicas (kind 24) e melhorias de privacidade de grupos. Consultas de cache do NDK aceleram 162x, Applesauce adiciona reações e suporte a carteira NIP-60, e Tenex introduz arquitetura RAL para delegação de agentes IA. Em nosso aprofundamento, explicamos &lt;a href="https://nostrcompass.org/pt/topics/nip-02/">NIP-02&lt;/a> (listas de seguidos) e &lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10&lt;/a> (threading de respostas), especificações fundamentais para construir timelines sociais e conversas.&lt;/p>
&lt;h2 id="news">Notícias&lt;/h2>
&lt;p>&lt;strong>Primal Android Se Torna um Assinador NIP-55&lt;/strong> - Construindo sobre o &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/#primal-android">suporte a Nostr Connect da semana passada&lt;/a>, Primal implementou capacidades completas de assinatura local através de oito pull requests merged. A implementação inclui um &lt;code>LocalSignerContentProvider&lt;/code> completo que expõe operações de assinatura para outros apps Android via a interface de content provider do Android, seguindo a especificação &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>. A arquitetura separa responsabilidades de forma limpa: &lt;code>SignerActivity&lt;/code> lida com fluxos de aprovação voltados ao usuário, &lt;code>LocalSignerService&lt;/code> gerencia operações em background, e um novo sistema de permissões permite que usuários controlem quais apps podem solicitar assinaturas. Isso torna o Primal uma alternativa viável ao Amber para usuários Android que querem manter suas chaves em um app enquanto usam outros para diferentes experiências Nostr.&lt;/p>
&lt;p>&lt;strong>Shopstr Zapsnags: Vendas Relâmpago via Lightning&lt;/strong> - O marketplace nativo Nostr introduziu &lt;a href="https://github.com/shopstr-eng/shopstr/pull/211">&amp;ldquo;Zapsnags&amp;rdquo;&lt;/a>, uma funcionalidade de venda relâmpago que permite compradores adquirirem itens diretamente do seu feed social com um único zap. A implementação filtra notas kind 1 tagueadas com &lt;code>#shopstr-zapsnag&lt;/code> e as renderiza como cards de produto com um botão &amp;ldquo;Zap para Comprar&amp;rdquo; ao invés do fluxo de carrinho padrão. Quando um comprador zapeia, o sistema gera uma solicitação de pagamento usando &lt;a href="https://nostrcompass.org/pt/topics/nip-57/">NIP-57&lt;/a>, consulta o recibo de zap kind 9735 para confirmar o pagamento, então encripta informações de envio usando gift wrapping &lt;a href="https://nostrcompass.org/pt/topics/nip-17/">NIP-17&lt;/a> antes de enviá-las de forma privada ao vendedor. A funcionalidade armazena detalhes do comprador localmente para compras repetidas e inclui um painel de comerciante para criar listagens de venda relâmpago. É uma combinação inteligente de primitivas sociais, de pagamento e privacidade que demonstra como o design componível do Nostr permite padrões de comércio novos.&lt;/p>
&lt;p>&lt;strong>Mostro Introduz Fundo de Desenvolvimento&lt;/strong> - A plataforma de trading P2P Bitcoin &lt;a href="https://nostrcompass.org/pt/topics/nip-69/">NIP-69&lt;/a> &lt;a href="https://github.com/MostroP2P/mostro/pull/555">implementou taxas de desenvolvimento configuráveis&lt;/a> para apoiar manutenção sustentável. Operadores podem definir &lt;code>dev_fee_percentage&lt;/code> entre 10-100% da taxa de trading do Mostro (padrão 30%), que automaticamente é direcionada a um fundo de desenvolvimento em cada trade bem-sucedido. A implementação adiciona três colunas de banco de dados (&lt;code>dev_fee&lt;/code>, &lt;code>dev_fee_paid&lt;/code>, &lt;code>dev_fee_payment_hash&lt;/code>) para rastrear contribuições e valida a porcentagem na inicialização do daemon. Documentação técnica em &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 o sistema. Este modelo opt-in permite que operadores apoiem desenvolvimento contínuo enquanto mantêm total transparência sobre alocação de taxas.&lt;/p>
&lt;h2 id="nip-updates">Atualizações de NIP&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Novos NIPs:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-a4/">NIP-A4&lt;/a> (Mensagens Públicas, kind 24)&lt;/strong> - Um novo kind para mensagens de tela de notificação projetadas para amplo suporte de clientes (&lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>). Diferente de conversas threaded, estas mensagens não têm conceito de histórico de chat ou cadeias de mensagem. Elas usam tags &lt;code>q&lt;/code> (citações) ao invés de tags &lt;code>e&lt;/code> para evitar complicações de threading, tornando-as ideais para notificações públicas simples que aparecem no feed de notificações de um destinatário sem criar estado de conversa.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Mudanças Significativas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> - Clarificação maior de semântica de grupos (&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>). A tag &lt;code>closed&lt;/code> agora significa &amp;ldquo;incapaz de escrever&amp;rdquo; (somente leitura para não-membros), desacoplada da mecânica de entrada. Uma nova tag &lt;code>hidden&lt;/code> previne que relays sirvam metadados ou eventos de membros para não-membros, permitindo grupos verdadeiramente privados que são indescobríveis sem convite fora de banda. A tag &lt;code>private&lt;/code> controla visibilidade de mensagens enquanto ainda permite metadados públicos para descoberta.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - Adicionado kind 30006 para conjuntos de imagens curadas (&lt;a href="https://github.com/nostr-protocol/nips/pull/2170">#2170&lt;/a>), seguindo o padrão de 30004 (artigos) e 30005 (vídeos). Já implementado no Nostria.&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - Clarificado início de conexão para assinadores Android (&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>). Desenvolvedores implementando sessões multi-usuário estavam usando mal &lt;code>get_public_key&lt;/code> chamando-o de processos em background. A especificação atualizada recomenda chamá-lo apenas uma vez durante a conexão inicial, prevenindo um footgun de implementação comum.&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-02-and-nip-10">Aprofundamento NIP: NIP-02 e NIP-10&lt;/h2>
&lt;p>Esta semana cobrimos dois NIPs essenciais para funcionalidade social: como clientes sabem quem você segue e como conversas são threaded.&lt;/p>
&lt;h3 id="nip-02pttopicsnip-02-lista-de-seguidos">&lt;a href="https://nostrcompass.org/pt/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 armazenam sua lista de seguidos. Este mecanismo simples potencializa o grafo social que torna timelines possíveis.&lt;/p>
&lt;p>&lt;strong>Estrutura:&lt;/strong> Um evento kind 3 contém tags &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 tag &lt;code>p&lt;/code> tem quatro posições: o nome da tag, a pubkey seguida (hex), uma dica de URL de relay opcional, e um &amp;ldquo;petname&amp;rdquo; opcional (um apelido local). A dica de relay diz a outros clientes onde encontrar os eventos daquele usuário. O petname permite que você atribua nomes memoráveis a contatos sem depender dos nomes de exibição auto-declarados deles.&lt;/p>
&lt;p>&lt;strong>Comportamento substituível:&lt;/strong> Kind 3 cai no intervalo substituível (0, 3, 10000-19999), então relays mantêm apenas a versão mais recente por pubkey. Quando você segue alguém novo, seu cliente publica um novo kind 3 completo contendo todos os seus seguidos mais o novo. Isso significa que listas de seguidos devem ser completas a cada vez; você não pode publicar atualizações incrementais.&lt;/p>
&lt;p>&lt;strong>Construindo timelines:&lt;/strong> Para construir um feed home, clientes buscam o kind 3 do usuário, extraem todas as pubkeys das tags &lt;code>p&lt;/code>, então se inscrevem em eventos kind 1 desses 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>O relay retorna notas correspondentes, e o cliente as renderiza. As dicas de relay no kind 3 ajudam clientes a saber quais relays consultar para cada usuário seguido.&lt;/p>
&lt;p>&lt;strong>Petnames e identidade:&lt;/strong> O campo petname habilita um esquema de nomes descentralizado. Ao invés de confiar em qualquer nome que um usuário declare em seu perfil, você pode atribuir seu próprio rótulo. Um cliente pode exibir &amp;ldquo;alice (Minha Irmã)&amp;rdquo; onde &amp;ldquo;alice&amp;rdquo; vem do perfil kind 0 dela e &amp;ldquo;Minha Irmã&amp;rdquo; é seu petname. Isso fornece contexto que nomes de usuário globais não podem.&lt;/p>
&lt;p>&lt;strong>Considerações práticas:&lt;/strong> Porque eventos kind 3 são substituíveis e devem ser completos, clientes devem preservar tags desconhecidas ao atualizar. Se outro cliente adicionou tags que seu cliente não entende, sobrescrever cegamente perderia esses dados. Anexe novos seguidos ao invés de reconstruir do zero.&lt;/p>
&lt;h3 id="nip-10pttopicsnip-10-threading-de-notas-de-texto">&lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10&lt;/a>: Threading 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 como notas kind 1 referenciam umas às outras para formar threads de resposta. Entender isso é essencial para construir views de conversa.&lt;/p>
&lt;p>&lt;strong>O problema:&lt;/strong> Quando alguém responde a uma nota, clientes precisam saber: A que isso é uma resposta? Qual é a raiz da conversa? Quem deve ser notificado? NIP-10 responde essas perguntas através de tags &lt;code>e&lt;/code> (referências de evento) e tags &lt;code>p&lt;/code> (menções de pubkey).&lt;/p>
&lt;p>&lt;strong>Tags marcadas (preferidas):&lt;/strong> Clientes modernos usam marcadores explícitos em tags &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;Ótimo ponto! Concordo.&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>O marcador &lt;code>root&lt;/code> aponta para a nota original que iniciou o thread. O marcador &lt;code>reply&lt;/code> aponta para a nota específica sendo respondida. Se respondendo diretamente à raiz, use apenas &lt;code>root&lt;/code> (nenhuma tag &lt;code>reply&lt;/code> necessária). A distinção importa para renderização: o &lt;code>reply&lt;/code> determina indentação em uma view de thread, enquanto &lt;code>root&lt;/code> agrupa todas as respostas juntas.&lt;/p>
&lt;p>&lt;strong>Regras de threading:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Resposta direta à raiz: Uma tag &lt;code>e&lt;/code> com marcador &lt;code>root&lt;/code>&lt;/li>
&lt;li>Resposta a uma resposta: Duas tags &lt;code>e&lt;/code>, uma &lt;code>root&lt;/code> e uma &lt;code>reply&lt;/code>&lt;/li>
&lt;li>O &lt;code>root&lt;/code> permanece constante através do thread; &lt;code>reply&lt;/code> muda baseado no que você está respondendo&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Tags pubkey para notificações:&lt;/strong> Inclua tags &lt;code>p&lt;/code> para todos que devem ser notificados. No mínimo, tagueie o autor da nota que você está respondendo. A convenção é também incluir todas as tags &lt;code>p&lt;/code> do evento pai (para que todos na conversa fiquem por dentro), mais quaisquer usuários que você @mencione em seu conteúdo.&lt;/p>
&lt;p>&lt;strong>Dicas de relay:&lt;/strong> A terceira posição em tags &lt;code>e&lt;/code> e &lt;code>p&lt;/code> pode conter uma URL de relay onde aquele evento ou conteúdo do usuário pode ser encontrado. Isso ajuda clientes a buscar o conteúdo referenciado mesmo se não estiverem conectados ao relay original.&lt;/p>
&lt;p>&lt;strong>Tags posicionais depreciadas:&lt;/strong> Implementações antigas do Nostr inferiam significado da posição de tag ao invés de marcadores: primeira tag &lt;code>e&lt;/code> era root, última era reply, do meio eram menções. Esta abordagem está depreciada porque cria ambiguidade. Se você vir tags &lt;code>e&lt;/code> sem marcadores, provavelmente são de clientes antigos. Implementações modernas devem sempre usar marcadores explícitos.&lt;/p>
&lt;p>&lt;strong>Construindo views de thread:&lt;/strong> Para exibir um thread, busque o evento root, então consulte por todos eventos com uma tag &lt;code>e&lt;/code> referenciando aquela raiz:&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>Ordene resultados por &lt;code>created_at&lt;/code> e use marcadores &lt;code>reply&lt;/code> para construir a estrutura de árvore. Eventos cujo &lt;code>reply&lt;/code> aponta para a raiz são respostas de primeiro nível; eventos cujo &lt;code>reply&lt;/code> aponta para outra resposta são respostas aninhadas.&lt;/p>
&lt;h2 id="releases">Lançamentos&lt;/h2>
&lt;p>&lt;strong>Zeus v0.12.0&lt;/strong> - Construindo sobre o &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/#zeus-lightning-wallet">suporte a pagamentos paralelos NWC da semana passada&lt;/a>, o &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.0">lançamento maior&lt;/a> da carteira Lightning entrega um serviço completo &lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect com suporte a relay personalizado e rastreamento de orçamento. Uma &lt;a href="https://github.com/ZeusLN/zeus/pull/3455">correção de recarga de orçamento&lt;/a> garante que conexões usem limites atuais. &lt;a href="https://github.com/ZeusLN/zeus/pull/3460">Cópia de endereço Lightning&lt;/a> não inclui mais o prefixo &lt;code>lightning:&lt;/code>, corrigindo problemas de colagem em campos de perfil Nostr.&lt;/p>
&lt;p>&lt;strong>Amber v4.0.6&lt;/strong> - O assinador &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a> Android &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.6">adiciona cache de performance&lt;/a> a operações de assinatura e melhora tratamento de erros ao decriptar conteúdo malformado. Confiabilidade de conexão melhorou com lógica de retry para eventos de conexão de relay, e várias correções de crash abordam casos extremos em torno de URIs &lt;code>nostrconnect://&lt;/code> inválidas e interações de tela de permissão.&lt;/p>
&lt;p>&lt;strong>nak v0.17.3&lt;/strong> - O &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.3">último lançamento&lt;/a> da ferramenta de linha de comando Nostr restringe builds LMDB ao Linux, corrigindo problemas de compilação cross-platform.&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.4&lt;/strong> - O assinador Nostr cross-platform &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4">adiciona suporte&lt;/a> para o esquema de URI &lt;code>nostrsigner:&lt;/code> definido em &lt;a href="https://nostrcompass.org/pt/topics/nip-55/">NIP-55&lt;/a>, correspondendo ao fluxo de conexão do Amber. Dados de relay local agora podem ser importados e exportados para backup, e o lançamento inclui correções de bugs para erros de socket de relay e melhorias de UI para a interface de relay local.&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">Mudanças notáveis de código e documentação&lt;/h2>
&lt;p>&lt;em>Estes são pull requests abertos e trabalho em estágio inicial, perfeitos para obter feedback antes de serem merged. Se algo chamar sua atenção, considere revisar ou comentar!&lt;/em>&lt;/p>
&lt;h3 id="damus">Damus (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3469">Persistência de lista de silenciados&lt;/a> corrige um problema onde listas de silenciados eram apagadas em cold start. A correção adiciona guardas para prevenir sobrescritas acidentais durante a inicialização do app. &lt;a href="https://github.com/damus-io/damus/pull/3457">Timing de stream de perfil&lt;/a> elimina um delay de ~1 segundo antes de perfis em cache aparecerem. Anteriormente, views esperavam por tarefas de inscrição reiniciarem; agora &lt;code>streamProfile()&lt;/code> imediatamente retorna dados em cache do NostrDB, removendo a janela onde pubkeys abreviadas e imagens placeholder apareciam.&lt;/p>
&lt;h3 id="white-noise">White Noise (Mensagens Encriptadas)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/919">Streaming de mensagens em tempo real&lt;/a> substitui o mecanismo de polling anterior com uma arquitetura baseada em stream. O novo &lt;code>ChatStreamNotifier&lt;/code> consome o stream de mensagens do SDK Rust diretamente, mantendo ordem cronológica e lidando com atualizações incrementais eficientemente. Testes mostraram melhoria significativa em responsividade. Uma &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/921">API de lista de chat&lt;/a> adiciona &lt;code>get_chat_list&lt;/code> para recuperar resumos de conversas, e uma &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/905">correção de ordenação estável&lt;/a> previne loops de reordenação de mensagens usando &lt;code>createdAt&lt;/code> com ID de mensagem como desempate.&lt;/p>
&lt;h3 id="ndk">NDK (Biblioteca)&lt;/h3>
&lt;p>Dois pull requests entregaram melhorias dramáticas de performance de cache. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a> corrigiu um bug onde eventos lidos do cache SQLite eram imediatamente escritos de volta, causando 100% de escritas duplicadas no boot do app. A correção adiciona uma guarda &lt;code>fromCache&lt;/code> e implementa verificação de duplicatas O(1) via um Set em memória. Para conjuntos de resultado pequenos (&amp;lt;100 eventos), transferência JSON direta substitui overhead de codificação binária. &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a> removeu chamadas desnecessárias &lt;code>seenEvent&lt;/code> para eventos em cache. A busca no cache LRU custava 0.24-0.64ms por evento; para 5,700 eventos em cache, isso adicionava ~1.4 segundos de overhead. Resultado: consultas de cache caíram de ~3,690ms para ~22ms (162x mais rápido).&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr (Biblioteca)&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1176">Suporte a REQ multi-filtro&lt;/a> foi restaurado após ser removido em um refactor anterior. O SDK novamente aceita &lt;code>Vec&amp;lt;Filter&amp;gt;&lt;/code> para solicitações de inscrição, permitindo consultas eficientes que combinam múltiplas condições de filtro com lógica OR. &lt;a href="https://github.com/rust-nostr/nostr/pull/1156">Proveniência de relay&lt;/a> foi adicionada a métodos &lt;code>stream_events*&lt;/code>, então cada evento em stream agora inclui o &lt;code>RelayUrl&lt;/code> de onde veio e um &lt;code>Result&lt;/code> indicando sucesso ou falha, útil para rastrear confiabilidade de relay e debugar problemas de conexão. Uma &lt;a href="https://github.com/rust-nostr/nostr/pull/1179">correção de segurança&lt;/a> removeu a dependência &lt;code>url-fork&lt;/code> seguindo RUSTSEC-2024-0421, eliminando uma vulnerabilidade conhecida.&lt;/p>
&lt;h3 id="applesauce">Applesauce (Biblioteca)&lt;/h3>
&lt;p>A biblioteca TypeScript que potencializa &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> viu desenvolvimento significativo esta semana. Novos modelos incluem um &lt;a href="https://github.com/hzrd149/applesauce">sistema de reações&lt;/a> e casting de grupos de usuários. Funcionalidade de carteira expandiu com suporte NIP-60, uma aba de envio, e ferramentas melhoradas de recuperação de token. Uma nova propriedade &lt;code>user.directMessageRelays$&lt;/code> expõe configuração de relay DM. Todas as ações foram refatoradas para usar interfaces async (removendo geradores async), e correções de bugs abordaram restauração de conteúdo encriptado e casos extremos de filtro de eventos baseados em tempo.&lt;/p>
&lt;h3 id="tenex">Tenex (Agentes IA)&lt;/h3>
&lt;p>O &lt;a href="https://github.com/tenex-chat/tenex">sistema de coordenação multi-agente&lt;/a> construído sobre Nostr introduziu arquitetura RAL (Request-Action-Lifecycle) em &lt;a href="https://github.com/pablof7z/tenex/pull/38">cinco PRs merged&lt;/a>. RAL permite que agentes pausem quando delegando tarefas e retomem quando resultados chegam, com persistência de estado no escopo da conversa. Ferramentas de delegação (&lt;code>delegate&lt;/code>, &lt;code>ask&lt;/code>, &lt;code>delegate_followup&lt;/code>, &lt;code>delegate_external&lt;/code>) agora publicam eventos Nostr e retornam sinais de parada ao invés de bloquear. O refactor inclui migração para AI SDK v6, infraestrutura de teste VCR para gravação determinística de interação LLM, e suporte a imagens multimodal.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo por esta semana. Construindo algo? Tem notícias para compartilhar? Quer que a gente cubra seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via NIP-17 DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item><item><title>Nostr Compass #1</title><link>https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/</guid><description>&lt;p>Bem-vindo ao Nostr Compass, um boletim semanal dedicado ao ecossistema do protocolo Nostr. Nossa missão é manter desenvolvedores, operadores de relays e construtores informados sobre desenvolvimentos importantes em toda a rede. Documentamos a evolução do protocolo com precisão técnica, neutralidade e profundidade, cobrindo desde propostas de NIP até lançamentos de clientes e melhores práticas de implementação.&lt;/p>
&lt;p>O Nostr Compass é inspirado no &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>, cujo trabalho dedicado ao longo dos anos avançando o conhecimento técnico do Bitcoin estabeleceu o padrão para boletins focados em protocolos. Somos gratos pelo exemplo deles e esperamos trazer o mesmo rigor ao ecossistema Nostr.&lt;/p></description><content:encoded>&lt;p>Bem-vindo ao Nostr Compass, um boletim semanal dedicado ao ecossistema do protocolo Nostr. Nossa missão é manter desenvolvedores, operadores de relays e construtores informados sobre desenvolvimentos importantes em toda a rede. Documentamos a evolução do protocolo com precisão técnica, neutralidade e profundidade, cobrindo desde propostas de NIP até lançamentos de clientes e melhores práticas de implementação.&lt;/p>
&lt;p>O Nostr Compass é inspirado no &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>, cujo trabalho dedicado ao longo dos anos avançando o conhecimento técnico do Bitcoin estabeleceu o padrão para boletins focados em protocolos. Somos gratos pelo exemplo deles e esperamos trazer o mesmo rigor ao ecossistema Nostr.&lt;/p>
&lt;p>Esta edição inaugural estabelece nosso formato semanal. Toda quarta-feira traremos atualizações de NIP, notas de lançamento, destaques de desenvolvimento e orientação técnica. Seja você construindo um cliente, operando um relay ou contribuindo para o protocolo, o Nostr Compass pretende ser sua fonte confiável sobre o que está acontecendo no ecossistema.&lt;/p>
&lt;h2 id="o-que-é-nostr">O que é Nostr?&lt;/h2>
&lt;p>&lt;em>Como esta é nossa primeira edição, começamos com uma introdução sobre como o Nostr funciona. Leitores regulares podem &lt;a href="https://nostrcompass.org/pt/newsletters/2025-12-17-newsletter/#not%c3%adcias">pular para frente&lt;/a>.&lt;/em>&lt;/p>
&lt;p>Nostr (Notes and Other Stuff Transmitted by Relays) é um protocolo descentralizado para redes sociais e mensagens. Diferente das plataformas tradicionais, o Nostr não tem servidor central, nenhuma empresa o controla e não tem ponto único de falha. Os usuários possuem sua identidade através de pares de chaves criptográficas, e o conteúdo flui através de servidores relay independentes que qualquer pessoa pode executar.&lt;/p>
&lt;p>&lt;strong>Como funciona:&lt;/strong> Os usuários geram um par de chaves (uma chave privada chamada nsec e uma chave pública chamada npub). A chave privada assina mensagens chamadas &amp;ldquo;eventos&amp;rdquo;, e a chave pública serve como sua identidade. Os eventos são enviados para relays, que os armazenam e encaminham para outros usuários. Como você controla suas chaves, pode trocar entre clientes ou relays sem perder sua identidade ou seguidores.&lt;/p>
&lt;p>&lt;strong>Por que importa:&lt;/strong> O Nostr fornece resistência à censura através da diversidade de relays (se um relay te banir, outros ainda podem servir seu conteúdo), portabilidade (sua identidade funciona em qualquer app Nostr) e interoperabilidade (todos os clientes Nostr falam o mesmo protocolo). Não há algoritmo decidindo o que você vê, sem anúncios e sem coleta de dados.&lt;/p>
&lt;p>&lt;strong>O ecossistema hoje:&lt;/strong> O Nostr suporta microblogging (como Twitter/X), conteúdo longo (como Medium), mensagens diretas, marketplaces, streaming ao vivo e mais. Os clientes incluem Damus (iOS), Amethyst (Android), Primal, Coracle e dezenas de outros. A integração com Lightning Network permite pagamentos instantâneos através de &amp;ldquo;zaps&amp;rdquo;. O protocolo continua a evoluir através de NIPs (Nostr Implementation Possibilities), especificações impulsionadas pela comunidade que estendem a funcionalidade.&lt;/p>
&lt;h2 id="news">Notícias&lt;/h2>
&lt;p>&lt;strong>NIP-BE Merged: Suporte Bluetooth Low Energy&lt;/strong> - Uma nova capacidade significativa &lt;a href="https://github.com/nostr-protocol/nips/pull/1979">chegou ao protocolo&lt;/a>. &lt;a href="https://nostrcompass.org/pt/topics/nip-be/">NIP-BE&lt;/a> especifica como aplicações Nostr podem se comunicar e sincronizar sobre Bluetooth Low Energy. Isso permite que apps capazes de funcionar offline sincronizem dados entre dispositivos próximos sem conectividade com internet. A especificação adapta padrões de relay WebSocket às restrições do BLE, usando compressão DEFLATE e mensagens fragmentadas para lidar com os pequenos tamanhos de MTU do BLE (20-256 bytes). Os dispositivos negociam papéis baseados na comparação de UUID, com o UUID mais alto se tornando o servidor GATT.&lt;/p>
&lt;p>&lt;strong>MIP-05: Notificações Push que Preservam Privacidade&lt;/strong> - O &lt;a href="https://nostrcompass.org/pt/topics/marmot/">Protocolo Marmot&lt;/a> publicou &lt;a href="https://nostrcompass.org/pt/topics/mip-05/">MIP-05&lt;/a> (&lt;a href="https://github.com/marmot-protocol/mips/blob/main/mip-05.md">especificação&lt;/a>), uma especificação para notificações push que mantêm a privacidade. Sistemas push tradicionais exigem que servidores conheçam tokens de dispositivo e identidades de usuário; MIP-05 resolve isso encriptando tokens de dispositivo com ECDH+HKDF e ChaCha20-Poly1305, usando chaves efêmeras para prevenir correlação. Um protocolo gossip de três eventos (kinds 447-449) sincroniza tokens encriptados entre membros do grupo, e as notificações usam gift wrapping &lt;a href="https://nostrcompass.org/pt/topics/nip-59/">NIP-59&lt;/a> com tokens chamariz para esconder tamanhos de grupo. Isso permite que WhiteNoise e outros clientes Marmot entreguem notificações oportunas sem comprometer a privacidade do usuário.&lt;/p>
&lt;p>&lt;strong>Blossom BUD-10: Novo Esquema URI&lt;/strong> - O protocolo de mídia &lt;a href="https://nostrcompass.org/pt/topics/blossom/">Blossom&lt;/a> está ganhando um esquema URI personalizado via &lt;a href="https://nostrcompass.org/pt/topics/bud-10/">BUD-10&lt;/a> (&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/10.md">especificação&lt;/a>). O novo formato &lt;code>blossom:&amp;lt;sha256&amp;gt;.ext&lt;/code> incorpora hash de arquivo, extensão, tamanho, múltiplas dicas de servidor e pubkeys de autor para descoberta de servidor &lt;a href="https://nostrcompass.org/pt/topics/bud-03/">BUD-03&lt;/a>. Isso torna links de blob mais resilientes que URLs HTTP estáticas ao permitir fallback automático entre servidores.&lt;/p>
&lt;p>&lt;strong>Atualizações do Marketplace Shopstr&lt;/strong> - O marketplace nativo Nostr &lt;a href="https://github.com/shopstr-eng/shopstr/pull/202">implementou Nostr Wallet Connect&lt;/a> (&lt;a href="https://nostrcompass.org/pt/topics/nip-47/">NIP-47&lt;/a>) para pagamentos, &lt;a href="https://github.com/shopstr-eng/shopstr/pull/203">adicionou expiração de listagens&lt;/a> usando &lt;a href="https://nostrcompass.org/pt/topics/nip-40/">NIP-40&lt;/a>, e introduziu &lt;a href="https://github.com/shopstr-eng/shopstr/pull/210">códigos de desconto&lt;/a> para vendedores.&lt;/p>
&lt;h2 id="nip-updates">Atualizações de NIP&lt;/h2>
&lt;p>Mudanças recentes no &lt;a href="https://github.com/nostr-protocol/nips">repositório de NIPs&lt;/a>:&lt;/p>
&lt;p>&lt;strong>Novos NIPs:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-be/">NIP-BE&lt;/a>&lt;/strong> - Mensagens Bluetooth Low Energy e sincronização 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/pt/topics/nip-63/">NIP-63&lt;/a>&lt;/strong> - Padrão de Paywall/Conteúdo Premium para lidar com conteúdo restrito dentro do protocolo (&lt;a href="https://github.com/nostr-protocol/nips/pull/2156">#2156&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Mudanças Significativas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/pt/topics/nip-24/">NIP-24&lt;/a>&lt;/strong> - Adicionado array opcional &lt;code>languages&lt;/code> aos metadados de usuário Kind 0, permitindo que usuários especifiquem múltiplos idiomas preferidos usando tags IETF BCP 47 para melhor descoberta de conteúdo e correspondência 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/pt/topics/nip-69/">NIP-69&lt;/a>&lt;/strong> - Adicionado suporte de expiração de ordem para trading P2P com tags &lt;code>expires_at&lt;/code> e &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/pt/topics/nip-59/">NIP-59&lt;/a>&lt;/strong> - Eventos gift wrap agora podem ser deletados via requisições 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/pt/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - Removidas tags de hashtag e URL de marcadores genéricos; hashtags agora usam 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/pt/topics/nip-18/">NIP-18&lt;/a>&lt;/strong> - Melhorados reposts genéricos para eventos substituíveis com suporte a tag &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/pt/topics/nip-17/">NIP-17&lt;/a>&lt;/strong> - Redação refinada e adicionado suporte a reação kind 7 para 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/pt/topics/nip-11/">NIP-11&lt;/a>&lt;/strong> - Adicionado campo &lt;code>self&lt;/code> para identificação de chave pública do 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">Aprofundamento em NIP: NIP-01 e NIP-19&lt;/h2>
&lt;p>Para esta edição inaugural, cobrimos dois NIPs fundamentais que todo desenvolvedor Nostr deve entender. Consulte nossas páginas de tópicos para &lt;a href="https://nostrcompass.org/pt/topics/nip-01/">NIP-01&lt;/a> e &lt;a href="https://nostrcompass.org/pt/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/pt/topics/nip-01/">NIP-01&lt;/a> define o protocolo central. Tudo no Nostr é construído sobre esta especificação.&lt;/p>
&lt;p>&lt;strong>Eventos&lt;/strong> são o único tipo de objeto. Cada evento contém:&lt;/p>
&lt;ul>
&lt;li>&lt;code>id&lt;/code>: Hash SHA256 do evento serializado (o identificador único do evento)&lt;/li>
&lt;li>&lt;code>pubkey&lt;/code>: A chave pública do criador (hex de 32 bytes, secp256k1)&lt;/li>
&lt;li>&lt;code>created_at&lt;/code>: Timestamp Unix&lt;/li>
&lt;li>&lt;code>kind&lt;/code>: Inteiro categorizando o tipo de evento&lt;/li>
&lt;li>&lt;code>tags&lt;/code>: Array de arrays para metadados&lt;/li>
&lt;li>&lt;code>content&lt;/code>: O payload (interpretação depende do kind)&lt;/li>
&lt;li>&lt;code>sig&lt;/code>: Assinatura Schnorr provando que a pubkey criou este evento&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Kinds&lt;/strong> determinam como relays armazenam eventos:&lt;/p>
&lt;ul>
&lt;li>Eventos regulares (1, 2, 4-44, 1000-9999): Armazenados normalmente, todas as versões mantidas&lt;/li>
&lt;li>Eventos substituíveis (0, 3, 10000-19999): Apenas o mais recente por pubkey é mantido&lt;/li>
&lt;li>Eventos efêmeros (20000-29999): Não armazenados, apenas encaminhados para assinantes&lt;/li>
&lt;li>Eventos endereçáveis (30000-39999): Mais recente por combinação pubkey + kind + d-tag&lt;/li>
&lt;/ul>
&lt;p>Kind 0 são metadados de usuário (perfil), kind 1 é uma nota de texto (o post básico), kind 3 é a lista de seguidos.&lt;/p>
&lt;p>&lt;strong>Kind 1: Notas de Texto&lt;/strong> são o coração do Nostr social. Um evento kind 1 é um post curto, similar a um tweet. O campo &lt;code>content&lt;/code> contém o texto da mensagem (texto puro, embora clientes frequentemente renderizem markdown). Tags permitem respostas, menções e referências:&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;Olá Nostr! Confira o trabalho do @jb55 no 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>A tag &lt;code>e&lt;/code> com marcador &amp;ldquo;reply&amp;rdquo; indica que isso é uma resposta (veja &lt;a href="https://nostrcompass.org/pt/topics/nip-10/">NIP-10&lt;/a> para convenções de threading). A tag &lt;code>p&lt;/code> menciona um usuário, permitindo que clientes o notifiquem e renderizem seu nome ao invés da pubkey crua. Clientes buscam o evento kind 0 do usuário mencionado para obter seu nome de exibição e foto.&lt;/p>
&lt;p>Para construir uma timeline, um cliente se inscreve em 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>. O relay retorna notas correspondentes, e o cliente as renderiza cronologicamente.&lt;/p>
&lt;p>&lt;strong>Eventos endereçáveis&lt;/strong> (30000-39999) funcionam como eventos substituíveis mas usam uma tag &lt;code>d&lt;/code> como identificador adicional. O relay mantém apenas a versão mais recente de cada combinação pubkey + kind + d-tag. Isso permite artigos editáveis, listagens de produtos, ou qualquer caso onde você precisa de múltiplos itens substituíveis por usuário.&lt;/p>
&lt;p>&lt;strong>Tags&lt;/strong> são arrays onde o primeiro elemento é o nome da tag. Tags padrão de uma única 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>) são indexadas por relays para consultas eficientes. Por exemplo, &lt;code>[&amp;quot;e&amp;quot;, &amp;quot;&amp;lt;event-id&amp;gt;&amp;quot;]&lt;/code> referencia outro evento, &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;&amp;lt;pubkey&amp;gt;&amp;quot;]&lt;/code> referencia um usuário.&lt;/p>
&lt;p>&lt;strong>Comunicação Cliente-Relay&lt;/strong> usa conexões WebSocket com arrays JSON como mensagens. O primeiro elemento identifica o tipo de mensagem.&lt;/p>
&lt;p>De cliente para relay:&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;event&amp;gt;]&lt;/code> - Publica um evento no 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> - Inscreve-se em eventos correspondentes ao(s) filtro(s)&lt;/li>
&lt;li>&lt;code>[&amp;quot;CLOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - Encerra uma inscrição&lt;/li>
&lt;/ul>
&lt;p>De relay para 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 um evento correspondente à sua inscrição&lt;/li>
&lt;li>&lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - &amp;ldquo;Fim de eventos armazenados&amp;rdquo; - o relay enviou todos os correspondentes históricos e agora só enviará novos eventos conforme chegarem&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> - Confirma se um evento foi aceito ou rejeitado (e por quê)&lt;/li>
&lt;li>&lt;code>[&amp;quot;NOTICE&amp;quot;, &amp;lt;message&amp;gt;]&lt;/code> - Mensagem legível por humanos do relay&lt;/li>
&lt;/ul>
&lt;p>O fluxo de inscrição: cliente envia &lt;code>REQ&lt;/code> com um ID de inscrição e filtro, relay responde com mensagens &lt;code>EVENT&lt;/code> correspondentes, então envia &lt;code>EOSE&lt;/code> para sinalizar que está em dia com o histórico. Após &lt;code>EOSE&lt;/code>, qualquer nova mensagem &lt;code>EVENT&lt;/code> é em tempo real. Cliente envia &lt;code>CLOSE&lt;/code> quando terminar.&lt;/p>
&lt;p>&lt;strong>Filtros&lt;/strong> especificam quais eventos recuperar. Um objeto filtro pode 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 tag), &lt;code>since&lt;/code>/&lt;code>until&lt;/code> (timestamps), e &lt;code>limit&lt;/code> (máximo de resultados). Todas as condições dentro de um filtro usam lógica AND. Você pode incluir múltiplos filtros em um &lt;code>REQ&lt;/code>, e eles se combinam com lógica OR - útil para buscar diferentes tipos de evento em uma inscrição.&lt;/p>
&lt;h3 id="nip-19-identificadores-codificados-em-bech32">NIP-19: Identificadores Codificados em Bech32&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/pt/topics/nip-19/">NIP-19&lt;/a> define os formatos amigáveis para humanos que você vê em todo lugar no Nostr: npub, nsec, note e mais. Estes não são usados no protocolo em si (que usa hex), mas são essenciais para compartilhamento e exibição.&lt;/p>
&lt;p>&lt;strong>Por que bech32?&lt;/strong> Chaves hex brutas são propensas a erros ao copiar e difíceis de distinguir visualmente. A codificação bech32 adiciona um prefixo legível por humanos e checksum. Você pode distinguir imediatamente um &lt;code>npub&lt;/code> (chave pública) de um &lt;code>nsec&lt;/code> (chave privada) ou &lt;code>note&lt;/code> (ID de evento).&lt;/p>
&lt;p>&lt;strong>Formatos básicos&lt;/strong> codificam valores brutos de 32 bytes:&lt;/p>
&lt;ul>
&lt;li>&lt;code>npub&lt;/code> - Chave pública (sua identidade, segura para compartilhar)&lt;/li>
&lt;li>&lt;code>nsec&lt;/code> - Chave privada (manter em segredo, usada para assinar)&lt;/li>
&lt;li>&lt;code>note&lt;/code> - ID de evento (referencia um evento específico)&lt;/li>
&lt;/ul>
&lt;p>Exemplo: A pubkey hex &lt;code>3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d&lt;/code> se torna &lt;code>npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Identificadores compartilháveis&lt;/strong> incluem metadados usando codificação TLV (Type-Length-Value):&lt;/p>
&lt;ul>
&lt;li>&lt;code>nprofile&lt;/code> - Perfil com dicas de relay (ajuda clientes a encontrar o usuário)&lt;/li>
&lt;li>&lt;code>nevent&lt;/code> - Evento com dicas de relay, pubkey do autor e kind&lt;/li>
&lt;li>&lt;code>naddr&lt;/code> - Referência de evento endereçável (pubkey + kind + d-tag + relays)&lt;/li>
&lt;/ul>
&lt;p>Estes resolvem um problema-chave: se alguém compartilha um ID de nota, como você sabe qual relay o tem? Um &lt;code>nevent&lt;/code> agrupa o ID do evento com relays sugeridos, tornando o compartilhamento mais confiável.&lt;/p>
&lt;p>&lt;strong>Importante:&lt;/strong> Nunca use formatos bech32 no protocolo em si. Eventos, mensagens de relay e respostas NIP-05 devem usar hex. Bech32 é puramente para interfaces humanas: exibição, copiar/colar, códigos QR e URLs.&lt;/p>
&lt;h2 id="releases">Lançamentos&lt;/h2>
&lt;p>&lt;strong>Amber v4.0.4&lt;/strong> - O app assinador Android corrige um NullPointerException, melhora performance na tela de atividade e adiciona traduções para alguns tipos de evento. O lançamento anterior v4.0.3 adicionou UI renovada de encriptação/decriptação, exportação/importação de contas, tratamento de relay por conta, suporte a ping bunker e relatório de crashes. &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.4">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Coracle 0.6.28&lt;/strong> - Lançamento de correção de bugs para o cliente web. Corrigidos feeds de tópicos, tratamento de imagens quando imgproxy está desabilitado, e linkificação de fontes de destaque que não são links. &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.28">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Flotilla v1.6.2&lt;/strong> - O cliente de comunidades estilo Discord corrige scroll modal e problemas de estilo. Lançamentos anteriores neste ciclo adicionaram badges e sons opcionais para notificações, renderização de links melhorada, escaneamento de código QR para links de convite e configuração de carteira simplificada. &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.6.2">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>nak v0.17.2&lt;/strong> - A ferramenta de linha de comando Nostr adicionou um novo comando &lt;code>nip&lt;/code> para consulta rápida de referência NIP, além de correções para tratamento de repositório git e processamento de eventos stdin. &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.2">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>White Noise v0.2.1&lt;/strong> - Lançamento maior para o app de mensagens encriptadas baseado em MLS adicionando compartilhamento de imagens via Blossom, sincronização em background, notificações push, localização em 8 idiomas e gerenciamento de membros de grupo. &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.2.1%2B14">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Amethyst v1.04.2&lt;/strong> - Lançamento com novas funcionalidades introduzindo listas/packs de seguidos, novos filtros de timeline, galeria de imagens e compressão de vídeo H.265 (arquivos 50% menores). Migração completa para Kotlin Multiplatform. &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.04.2">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.5&lt;/strong> - Atualização da plataforma de trading P2P com suporte a expiração de ordem NIP-69 e respostas melhoradas de histórico de trades. &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.5">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Nosflare v8.9.26&lt;/strong> - Relay Nostr serverless construído na infraestrutura Cloudflare. Este lançamento entrega um hotfix crítico abordando um bug que poderia causar falhas de websocket, garantindo conexões mais estáveis para usuários e aplicações que dependem do relay. &lt;a href="https://github.com/Spl0itable/nosflare/releases/tag/v8.9.26">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Noscall v0.4.1&lt;/strong> - App de chamadas de áudio e vídeo seguras baseado em Nostr. Este lançamento melhora a UI pop-up na página Me e corrige vários problemas conhecidos, resultando em melhor estabilidade e confiabilidade de chamadas. &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.4.1-release">Lançamento&lt;/a>&lt;/p>
&lt;p>&lt;strong>Gitplaza v0.25.0&lt;/strong> - Cliente de desktop Nostr focado em atividade relacionada a Git. Este lançamento introduz um filtro de kind avançado para o feed de inbox, inclui zaps regulares em filtros e simplifica a formatação de texto de abas. Melhorias de performance otimizam o carregamento da árvore de comentários, reduzem consultas desnecessárias ao banco de dados e usam branches de comentários em cache para exibição mais rápida. &lt;a href="https://codeberg.org/dluvian/gitplaza/releases/tag/v0.25.0">Lançamento&lt;/a>&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">Mudanças notáveis de código e documentação&lt;/h2>
&lt;h3 id="damus">Damus (iOS)&lt;/h3>
&lt;p>Foco em estabilidade com correções de crash e UI: &lt;a href="https://github.com/damus-io/damus/pull/3377">correção de pulo de cursor&lt;/a> para a view de composição, &lt;a href="https://github.com/damus-io/damus/pull/3366">redesign da interface NostrDB&lt;/a> usando tipos &lt;code>~Copyable&lt;/code> do Swift para segurança de transações, &lt;a href="https://github.com/damus-io/damus/pull/3341">estabilidade de UI de threads&lt;/a> corrigindo reinstanciação da barra de ações, &lt;a href="https://github.com/damus-io/damus/pull/3346">congelamento de lista de silenciados&lt;/a> por ciclos de AttributeGraph, e &lt;a href="https://github.com/damus-io/damus/pull/3334">crash de perfil&lt;/a> por limpeza de transação entre threads. Também adicionou diretrizes &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">Notedeck (Desktop/Mobile)&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1191">Armazenamento seguro de chaves&lt;/a> move nsec para o armazenamento seguro do SO com migração automática. &lt;a href="https://github.com/damus-io/notedeck/pull/1201">Filtragem de notas futuras&lt;/a> esconde eventos datados 24+ horas à frente (anti-spam). &lt;a href="https://github.com/damus-io/notedeck/pull/1183">Cópia de nevent&lt;/a> agora inclui dicas de relay. Também: &lt;a href="https://github.com/damus-io/notedeck/pull/1212">adição rápida de coluna de perfil&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1208">navegação por teclado&lt;/a>, &lt;a href="https://github.com/damus-io/notedeck/pull/1210">otimização de carregamento de mídia&lt;/a>.&lt;/p>
&lt;h3 id="amethyst">Amethyst (Android)&lt;/h3>
&lt;p>Suporte a &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1555">assinatura remota NIP-46&lt;/a> para Nostr Connect. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1586">Organização de marcadores&lt;/a> com gerenciamento de lista pública/privada. &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1596">Correção de compatibilidade strfry&lt;/a> para casos extremos de parsing 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">Login remoto&lt;/a> via scan de QR para conexões bunker. &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/783">Correção de condição de corrida de conexão&lt;/a>.&lt;/p>
&lt;h3 id="white-noise">White Noise (Mensagens Encriptadas)&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/890">Correção de retenção de dados do app&lt;/a> desabilita auto-backup do Android para privacidade. &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/861">Comportamento de scroll do chat&lt;/a> preserva posição ao ler histórico.&lt;/p>
&lt;h3 id="zeus">Zeus (Carteira Lightning)&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/pull/3407">Pagamentos paralelos NIP-47&lt;/a> para melhor throughput de zaps em lote.&lt;/p>
&lt;h2 id="melhores-práticas-para-desenvolvedores">Melhores Práticas para Desenvolvedores&lt;/h2>
&lt;p>&lt;strong>Valide Eventos Auth Defensivamente&lt;/strong> - go-nostr corrigiu um &lt;a href="https://github.com/nbd-wtf/go-nostr/pull/182">panic na validação NIP-42&lt;/a> quando a tag relay estava faltando. Sempre verifique as tags requeridas antes de acessá-las, mesmo em fluxos auth onde você espera eventos bem formados.&lt;/p>
&lt;p>&lt;strong>Limite Taxa por Estado de Autenticação&lt;/strong> - khatru adicionou &lt;a href="https://github.com/fiatjaf/khatru/pull/57">limitação de taxa baseada em NIP-42&lt;/a>, permitindo que relays apliquem limites diferentes para conexões autenticadas vs anônimas. Considere limites escalonados baseados em status auth ao invés de restrições gerais.&lt;/p>
&lt;p>&lt;strong>Use Paginação por Cursor para Listas&lt;/strong> - Blossom &lt;a href="https://github.com/hzrd149/blossom/pull/65">substituiu paginação baseada em data&lt;/a> com paginação baseada em cursor no endpoint &lt;code>/list&lt;/code>. Paginação baseada em data quebra quando itens compartilham timestamps; cursores fornecem iteração confiável.&lt;/p>
&lt;p>&lt;strong>Validação de Schema para Tipos de Evento&lt;/strong> - O projeto &lt;a href="https://github.com/nostrability/schemata">nostrability/schemata&lt;/a> fornece schemas JSON para validar eventos compatíveis com NIP. Considere integrar validação de schema em desenvolvimento para capturar eventos malformados antes que cheguem aos relays.&lt;/p>
&lt;hr>
&lt;p>Isso é tudo por esta semana. Construindo algo? Tem notícias para compartilhar? Quer que a gente cubra seu projeto? &lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">Entre em contato via NIP-17 DM&lt;/a> ou nos encontre no Nostr.&lt;/p></content:encoded></item></channel></rss>