OK
https://nostr.com/
Websites
Runtime: 899ms
On August 01, 2025, 02:35 AM UTC, https://nostr.com/ was accessible when tested on AS25139 in Mozambique.
Failures
HTTP Experiment
null
DNS Experiment
null
Control
null
DNS Queries
Resolver:
197.249.0.241
Query:
IN A nostr.com
Engine:
system
Name
Class
TTL
Type
DATA
@
IN
A
104.21.48.1
@
IN
A
104.21.16.1
@
IN
A
104.21.80.1
@
IN
A
104.21.32.1
@
IN
A
104.21.64.1
@
IN
A
104.21.112.1
@
IN
A
104.21.96.1
Query:
IN AAAA nostr.com
Engine:
system
Name
Class
TTL
Type
DATA
@
IN
AAAA
2606:4700:3030::6815:4001
@
IN
AAAA
2606:4700:3030::6815:7001
@
IN
AAAA
2606:4700:3030::6815:1001
@
IN
AAAA
2606:4700:3030::6815:3001
@
IN
AAAA
2606:4700:3030::6815:5001
@
IN
AAAA
2606:4700:3030::6815:2001
@
IN
AAAA
2606:4700:3030::6815:6001
TCP Connections
Connection to 104.21.16.1:443 succeeded.
Connection to 104.21.112.1:443 succeeded.
Connection to 104.21.32.1:443 succeeded.
Connection to 104.21.64.1:443 succeeded.
Connection to 104.21.48.1:443 succeeded.
Connection to 2606:4700:3030::6815:1001:443 was blocked.
Connection to 2606:4700:3030::6815:2001:443 was blocked.
Connection to 2606:4700:3030::6815:3001:443 was blocked.
Connection to 2606:4700:3030::6815:4001:443 was blocked.
Connection to 2606:4700:3030::6815:5001:443 was blocked.
Connection to 2606:4700:3030::6815:6001:443 was blocked.
Connection to 2606:4700:3030::6815:7001:443 was blocked.
Connection to 104.21.80.1:443 succeeded.
Connection to 104.21.96.1:443 succeeded.
HTTP Requests
URL
GET https://nostr.com/
Response Headers
Access-Control-Allow-Credentials:trueAccess-Control-Allow-Origin:https://nostr.comAlt-Svc:h3=":443"; ma=86400Cache-Control:public, max-age=0, must-revalidateCf-Cache-Status:DYNAMICCf-Ray:9681f1ddb9cb73a2-JNBContent-Type:text/html; charset=utf-8Date:Fri, 01 Aug 2025 02:35:54 GMTNel:{"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}Referrer-Policy:strict-origin-when-cross-originReport-To:{"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=zeRx%2Be3YK9lih7WgpYxXSyWBlxTDXOqTFMLyv4Hv4K3Jkf3o2nBUldeB1NCLuHpJrkDw62WyP5LNeg52spKQchBTPZQpJ8r1rjhM%2Bkc%3D"}]}Server:cloudflareServer-Timing:cfCacheStatus;desc="DYNAMIC"Vary:accept-encodingX-Content-Type-Options:nosniff
Response Body
<!doctype html> <html lang="en" x-data="darkMode()" :class="isDark ? 'dark' : ''"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Nostr - Notes and Other Stuff Transmitted by Relays</title> <!----> <!-- for production --> <link href="/main.css" rel="stylesheet" /> <!-- for development --> <link href="/src/base.css" rel="stylesheet" /> <!----> <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet" /> <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script> </head> <body class="font-sans bg-background-light dark:bg-dotcom-dark text-primary dark:text-white" x-data="modalToggler()" > <!-- Header --> <header class="border-b"> <div class="max-w-7xl mx-auto flex justify-between items-center px-4 py-4"> <div class="text-xl font-bold tracking-tight"> <span class="text-primary dark:text-white">nostr</span> </div> <nav class="flex gap-6 text-sm text-primary dark:text-white"> <a href="#/.com-services" class="text-dotcom-light brightness-[80%] font-semibold" >Support</a > <a href="https://nostrapps.com/" target="_blank">Apps</a> <a href="https://nostr.band" target="_blank" class="hidden md:block">Explore</a> <a href="https://github.com/nostr-protocol/nips" target="_blank" class="hidden md:block" >Spec</a > <button @click="toggle()" aria-label="Toggle dark mode" class="cursor-pointer ml-4 text-2xl transition material-symbols-outlined" x-text="isDark ? 'light_mode' : 'dark_mode'" ></button> </nav> </div> </header> <!-- Hero --> <section class="text-center py-20 px-6"> <h1 class="mt-4 text-4xl md:text-6xl lg:text-7xl font-bold max-w-5xl mx-auto mb-6 scroll-reveal-slow" > An open protocol with a chance of working </h1> <p class="text-base md:text-lg max-w-4xl mx-auto text-primary-lighter dark:text-gray-300 mb-8 scroll-reveal" > Nostr is an apolitical communication commons. A simple standard that defines a scalable architecture of clients and servers that can be used to spread information freely. Not controlled by any corporation or government, anyone can build on Nostr and anyone can use it. <img src="/robots/nostr-robot.png" alt="Friendly robot" class="hidden md:block fixed top-12 right-[-70px] w-20 md:w-28 z-1" /> </p> <div class="flex flex-col sm:flex-row justify-center gap-4 scroll-reveal"> <button @click="showModal()" class="cursor-pointer inline-flex items-center mx-auto sm:mx-0 max-w-lg bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-6 py-2.5 rounded-full text-sm transition hover:opacity-90" > Join Nostr <span class="ml-1 text-lg">›</span> </button> <a href="https://www.youtube.com/watch?v=Tbt3jL1Ms0w" target="_blank" class="cursor-pointer inline-flex items-center mx-auto sm:mx-0 max-w-lg border border-secondary dark:border-dotcom-light text-primary dark:text-white font-medium px-8 md:px-6 py-2.5 rounded-full text-sm transition hover:bg-grayish dark:hover:bg-gray-700" > Watch a presentation <span class="ml-1 text-lg">›</span> </a> </div> </section> <!-- Screenshots --> <section class="screenshots-container px-4 mb-20 px-16 sm:px-4 h-140 sm:h-180 overflow-hidden mx-4 xs:mx-8 sm:mx-auto max-w-xl sm:max-w-3xl md:max-w-5xl relative scroll-reveal-stagger" > <!-- Terminal Mock --> <div title="the `nak` CLI tool" class="hidden md:block max-w-4xl max-h-60 absolute left-5 top-85 bg-primary-lighter dark:bg-gray-800 rounded-xl border shadow-lg overflow-hidden transition duration-500 opacity-70 hover:opacity-100 hover:z-20" > <div class="text-sm font-mono text-gray-200 p-4 break-all leading-snug"> <span class="font-semibold text-green-700">~</span><span class="font-semibold">></span> <a class="text-teal-500" href="https://github.com/fiatjaf/nak" target="_blank">nak</a> <span class="text-purple-300" >event --sec 7465 -c <span class="text-yellow-500">'this is going to work'</span> nostr.wine relay.damus.io nostr.mom</span ><br /> <span class="font-semibold text-green-400">nostr.wine</span>... ok.<br /> <span class="font-semibold text-green-400">relay.damus.io</span>... ok.<br /> <span class="font-semibold text-green-400">nostr.mom</span>... ok.<br /> {"kind":1,"id":"b9fead6eef87d8400cbc1a5621400b360438affb9760a6a043cc0bddea21dab6","pubkey":"82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2","created_at":1676161639,"tags":[],"content":"this is going to work","sig":"76d19889a803236165a290fa8f3cf5365af8977ee1e002afcfd37063d1355fc755d0293d27ba0ec1c2468acfaf95b7e950e57df275bb32d7a4a3136f8862d2b7"}<br /> publishing to <span class="font-semibold text-green-400">relay.damus.io</span>... success.<br /> publishing to <span class="font-semibold text-red-400">nostr.wine</span>... msg: restricted: not an active paid member<br /> publishing to <span class="font-semibold text-green-400">nostr.mom</span>... success.<br /> </div> </div> <!-- Screenshot --> <img class="hidden sm:block max-w-2xl md:max-w-3xl absolute left-0 top-5 rounded-xl shadow-lg transition duration-500 opacity-90 hover:opacity-100 hover:z-20 cursor-pointer" @click="window.open('https://coracle.social')" src="/screenshots/coracle.png" title="the Coracle client" /> <!-- iframe --> <div class="absolute left-10 top-25 transition duration-500 opacity-90 hover:opacity-100 hover:z-20" x-data="{url: 'https://chachi.chat/relay/wss%3A%2F%2F' + (Math.random() < 0.3 ? 'yabu.me' : 'nostr.wine') + '/feed'}" > <iframe class="hidden sm:block w-xl md:w-2xl h-130 rounded-xl shadow-lg" src="" :src="url" title="the chachi client" > </iframe> <a :href="url" target="_blank" class="absolute top-0 left-0 right-0 h-10 z-10 cursor-pointer" title="Open Chachi client" aria-label="Open Chachi client" ></a> <a :href="url" target="_blank" class="absolute top-0 left-0 bottom-0 w-10 z-10 cursor-pointer" title="Open Chachi client" aria-label="Open Chachi client" ></a> <a :href="url" target="_blank" class="absolute top-0 right-0 bottom-0 w-10 z-10 cursor-pointer" title="Open Chachi client" aria-label="Open Chachi client" ></a> </div> <!-- iframe --> <div class="absolute left-20 top-45 transition duration-500 opacity-90 hover:opacity-100 hover:z-20" x-data="{url: 'https://jumble.social/?r=' + (Math.random() < 0.5 ? Math.random() < 0.5 ? 'relays.land/spatianostra' : 'nostr.land' : 'pyramid.fiatjaf.com')}" > <iframe class="hidden sm:block w-xl md:w-3xl h-[630px] rounded-xl shadow-lg transition duration-500 opacity-90 hover:opacity-100 hover:z-20" :src="url" title="the Jumble client" > </iframe> <a :href="url" target="_blank" class="absolute top-0 left-0 right-0 h-10 z-10 cursor-pointer" title="Open Jumble client" aria-label="Open Jumble client" ></a> <a :href="url" target="_blank" class="absolute top-0 left-0 bottom-0 w-10 z-10 cursor-pointer" title="Open Jumble client" aria-label="Open Jumble client" ></a> <a :href="url" target="_blank" class="absolute top-0 right-0 bottom-0 w-10 z-10 cursor-pointer" title="Open Jumble client" aria-label="Open Jumble client" ></a> </div> <!-- Screenshot --> <img class="h-120 absolute right-0 top-0 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20 cursor-pointer" @click="window.open('https://www.amethyst.social/')" src="/screenshots/amethyst.png" title="the Amethyst client" /> <!-- Screenshot --> <img class="h-120 absolute right-20 top-10 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20" @click="window.open('https://yakihonne.com/yakihonne-mobile-app')" src="/screenshots/yakihonne2.png" title="the Yakihonne client" /> <!-- Screenshot --> <img class="h-120 absolute right-40 top-20 rounded-xl transition duration-500 opacity-90 hover:opacity-100 hover:z-20" @click="window.open('https://nostur.com/')" src="/screenshots/nostur.png" title="the Nostur client" /> </section> <!-- Integration Subtitle --> <section class="mx-auto my-4 text-center mb-16 max-w-2xl scroll-reveal"> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3" > All Kinds of Stuff </span> <h2 class="text-2xl md:text-3xl font-bold mb-2 mx-1"> Like the internet itself: open and chaotic </h2> <p class="text-primary-lighter dark:text-gray-300 text-base mx-4"> Nostr embraces the chaos of the early internet—multiple kinds of data, diverse forms of user interaction and different clients providing their own perspectives over the same underlying information. </p> </section> <!-- Innovation Card --> <section class="px-6 max-w-5xl mx-auto mb-24 scroll-reveal"> <div class="flex flex-col md:flex-row justify-between gap-8 items-center" data-swap="cards"> <div class="flex items-start gap-3"> <div class="w-8 h-8 bg-grayish dark:bg-gray-700 rounded-full flex items-center justify-center" > <span class="text-xs font-medium material-symbols-outlined">rebase</span> </div> <div> <h3 class="font-semibold text-lg mb-1">Many clients, many servers</h3> <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-md"> The client is the app that is running on your computer or phone, the server is whatever is running on a cloud somewhere with a domain name. In centralized platforms and other protocols, one client talks to a single server. In Nostr clients connect to many. </p> </div> </div> <a href="https://newsletter.squishy.computer/p/natures-many-attempts-to-evolve-a" target="_blank" class="inline-flex items-center bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-4 py-2 rounded-full text-sm transition hover:opacity-90" > Learn how Nostr is different <span class="ml-1 text-lg">›</span> </a> </div> </section> <!-- Features Grid --> <section class="px-6 max-w-6xl mx-auto mb-24"> <div class="grid md:grid-cols-3 gap-10 text-center"> <div class="flex flex-col items-center scroll-reveal-stagger"> <img src="/robots/gmnotes.png" class="h-52 mb-4 rounded" /> <h3 class="font-semibold mb-2">Cryptographically signed notes</h3> <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg"> Nostr's single unit of information is a cryptographically signed note, these are created by users in their client software and published to one or more relays. </p> </div> <div class="flex flex-col items-center scroll-reveal-stagger"> <img src="/robots/client.png" class="h-52 mb-4 rounded" /> <h3 class="font-semibold mb-2">Smart clients as user agents</h3> <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg"> Clients are smart and act as agents for the users who install them. They decide which relays to connect to and when and what data to request according to the circumstance and user preferences. </p> </div> <div class="flex flex-col items-center scroll-reveal-stagger"> <img src="/robots/relayflasks.png" class="h-52 mb-4 rounded" /> <h3 class="font-semibold mb-2">Relays as distribution centres</h3> <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-lg"> These are the servers that notes are published to and read from. They cannot change the contents of notes (that would invalidate the signature), but they can decide what to store and for how long. </p> </div> </div> </section> <!-- Cryptography Card --> <section class="md:hidden px-6 max-w-5xl mx-auto mb-24 scroll-reveal"> <div class="flex flex-col md:flex-row justify-between gap-8 items-center" data-swap="cards"> <div class="flex items-start gap-3"> <div class="w-8 h-8 bg-grayish dark:bg-gray-700 rounded-full flex items-center justify-center" > <span class="text-xs font-medium material-symbols-outlined">signature</span> </div> <div> <h3 class="font-semibold text-lg mb-1">A new paradigm for communication</h3> <p class="text-sm text-primary-lighter dark:text-gray-300 max-w-md"> In Nostr, every user is represented by a secret number called a "key" and every message carries a digital "signature" that proves its authorship authorship and authenticity without the need for any authority to say so. This foundation of trust enables the decentralized broadcasting of information. </p> </div> </div> <a href="https://www.youtube.com/watch?v=GLluXpTRbqs&t=169s" target="_blank" class="inline-flex items-center bg-secondary dark:bg-dotcom-light text-white dark:text-dotcom-dark font-medium px-8 md:px-4 py-2 rounded-full text-sm transition hover:opacity-90" > Watch a human-friendly explanation <span class="ml-1 text-lg">›</span> </a> </div> </section> <!-- Pro-censorship Section --> <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal"> <div class="grid md:grid-cols-2 gap-10 items-center"> <img :src="isDark ? '/robots/relayselection-dark.png' : '/robots/relayselection.png'" class="mb-4 mx-auto h-100 md:h-auto md:order-2" /> <div> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">shield</span> Pro-censorship </span> <h2 class="text-2xl md:text-3xl font-bold mb-4"> The protocol is ownerless, relays are not </h2> <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm"> Nostr doesn't subscribe to political ideals of "free speech" — it simply recognizes that different people have different morals and preferences and each server, being privately owned, can follow their own criteria for rejecting content as they please and users are free to choose what to read and from where. </p> <div class="flex flex-col sm:flex-row gap-4 mb-4"> <a href="https://njump.me/naddr1qqfxzttkd9ekjmmw94nx7u3ddehhxarjqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7q3qjlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qxpqqqp65w0nuxzl#:~:text=Instead,%20relays%20should%20differentiate,%20both%20in%20terms%20of%20function%20and%20membership.%20In%20the%20future%20(and%20even%20now)%20there%20will%20be%20closed%20archival%20relays%20that%20scrape%20the%20network%20and%20provide%20a%20backup%20of%20user%20data%20for%20a%20fee;%20public-read,%20private-write%20relays%20that%20allow%20members%20to%20participate%20in%20an%20exclusive%20group%20with%20greater%20reach;%20private-read,%20private-write%20closed%20community%20relays;%20public%20"town%20square"%20relays,%20paid%20relays%20that%20provide%20indexes,%20full-text%20search,%20or%20content%20recommendations%20for%20the%20wider%20network%20(or%20a%20relevant%20subset%20of%20it);%20and%20relays%20that%20provide%20oracles%20for%20data%20external%20to%20nostr." class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700" target="_blank" > Read about relay differentiation </a> </div> <div class="flex flex-col sm:flex-row gap-6 text-sm"> <div class="text-xs"> <div class="text-primary dark:text-white font-semibold flex flex-col"> <div class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2" > handshake </div> Freedom of association </div> <p class="my-2 text-xs text-primary-lighter dark:text-gray-300"> When the network effect is not tied to a single organization a group of users cannot harm others. </p> <a href="https://www.youtube.com/watch?v=K5oXaW1EqbE" class="inline-flex items-center text-primary dark:text-white font-medium" target="_blank" > Watch <span class="ml-1">›</span> </a> </div> <div class="text-xs"> <div class="text-primary dark:text-white font-semibold flex flex-col"> <div class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2" > landscape_2 </div> Your own piece of Nostr </div> <p class="mb-2 text-xs text-primary-lighter dark:text-gray-300"> If you are a programmer or know how to run servers it is trivial to run your own relay with your own rules. </p> <a href="https://khatru.nostr.technology" class="inline-flex items-center text-primary dark:text-white font-medium" target="_blank" > Write code <span class="ml-1">›</span> </a> </div> </div> </div> </div> </section> <!-- Subprotocols Section --> <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal"> <div class="grid md:grid-cols-2 gap-10 items-center"> <img :src="isDark ? '/robots/feed-dark.png' : '/robots/feed.png'" class="mx-auto h-100 md:h-auto mb-4" /> <div> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary dark:text-white text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">lightbulb_2</span> New Ideas </span> <h2 class="text-2xl md:text-3xl font-bold mb-4">Exploring the commons</h2> <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm"> Besides being a natural medium for a Twitter-like microblogging social network, Nostr can also be used for other purposes. And not only similar things like sharing <i>videos</i>, longform <i>articles</i>, <i>pictures</i> or <i>voice notes</i>. There are initiatives on Nostr for the development of sub-protocols that power <b>closed groups</b>, <b>decentralized wikipedia</b>, <b>couchsurfing</b>, <b>marketplaces</b> or <b>web annotations</b>; as well as protocols that don't use Nostr for the core data but as a coordination and discovery mechanism, such as <b>decentralized code collaboration using git</b>, <b>file hosting</b>, <b>torrent sharing</b> and <b>video livestreaming</b>. </p> <a href="https://github.com/nostr-protocol/nips" target="_blank" class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700" > Browse the NIPs </a> </div> </div> </section> <!-- Under Construction section --> <section class="px-6 max-w-6xl mx-auto mb-32 scroll-reveal"> <div class="grid md:grid-cols-2 gap-10 items-center"> <img :src="isDark ? '/robots/underconstruction-dark.png' : '/robots/underconstruction.png'" class="mx-auto h-100 md:h-auto mb-4 md:order-2" /> <div> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">grass</span> Ecosystem </span> <h2 class="text-2xl md:text-3xl font-bold mb-4">Still under construction</h2> <p class="text-primary-lighter dark:text-gray-300 mb-4 text-sm"> Nostr is an idea with a lot of open-source software around it and a large userbase, but not a finished, polished product that you can buy without stress. We're still pretty much in the phase where new programmers and early adopters are needed to help us refine the protocol flows and the user experience. </p> <div class="flex flex-col sm:flex-row gap-4 mb-4"> <a href="https://github.com/topics/nostr?o=desc&s=updated" class="inline-flex items-center border border-secondary dark:border-dotcom-light text-primary dark:text-white text-sm font-medium px-8 md:px-4 py-2 rounded-full transition hover:bg-grayish dark:hover:bg-gray-700" target="_blank" > List of repositories on GitHub </a> </div> <div class="grid sm:grid-cols-2 gap-6 text-sm"> <div class="text-xs"> <div class="text-primary dark:text-white font-semibold flex flex-col"> <div class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2" > comment </div> Microblogging </div> <p class="my-2 text-xs text-primary-lighter dark:text-gray-300"> The so-called "outbox model" is the canonical way of implementing a censorship-resistant client, but its parameters are fluid. </p> <a href="https://github.com/coracle-social/how-to-nostr/blob/master/04-relays-are-repositories.md#the-outbox-model-and-friends" class="inline-flex items-center text-primary dark:text-white font-medium" target="_blank" > Learn about it <span class="ml-1">›</span> </a> </div> <div class="text-xs"> <div class="text-primary dark:text-white font-semibold flex flex-col"> <div class="block text-secondary dark:text-dotcom-light font-medium material-symbols-outlined mb-2" > hub </div> Relay-based groups </div> <p class="my-2 text-xs text-primary-lighter dark:text-gray-300"> NIP-29 describes a way to do closed groups for forums or chat that can be very efficient by relying on a relay but are still censorship-resistant. </p> <a href="https://njump.me/naddr1qvzqqqr4gupzp978pfzrv6n9xhq5tvenl9e74pklmskh4xw6vxxyp3j8qkke3cezqqxnzde5xyersd33xscrwwfh5ekns6" class="inline-flex items-center text-primary dark:text-white font-medium" target="_blank" > Read the guide <span class="ml-1">›</span> </a> </div> </div> </div> </div> </section> <!-- How Nostr Works --> <section class="px-6 max-w-6xl mx-auto mb-24 text-center scroll-reveal"> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">account_circle</span> Following </span> <h2 class="text-2xl md:text-3xl font-bold mb-2">How Nostr works</h2> <p class="text-primary-lighter dark:text-gray-300 max-w-xl mx-auto text-sm mb-10"> Nostr enables true freedom by allowing users to stay connected to their audience even in adverse scenarios. </p> <div class="grid grid-cols-1 md:grid-cols-3 gap-6 text-left"> <!-- Item 1 --> <div class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 md:col-span-2 scroll-reveal-stagger" > <img :src="isDark ? '/robots/sendmenotes-dark.png' : '/robots/sendmenotes.png'" class="mb-4 sm:h-70 md:h-auto block mx-auto" /> <h3 class="font-semibold mb-2">User chooses their outbox relays</h3> <p class="text-sm text-primary-lighter dark:text-gray-300"> Patricia publishes a special event announcing which servers she will use as her "outbox relay" for publishing notes. She then starts sending all her posts to these chosen relays, creating a predictable place where others can find her content. </p> <div class="text-sm text-primary-lighter dark:text-gray-300 mt-2"> Because servers are interchangeable any will suffice. </div> </div> <!-- Item 2 --> <div class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger" > <img :src="isDark ? '/robots/shakeread-dark.png' : '/robots/shakeread.png'" class="mb-4 h-70 md:h-auto block mx-auto" /> <h3 class="font-semibold mb-2">Someone starts following</h3> <p class="text-sm text-primary-lighter dark:text-gray-300"> When Florian wants to read Patricia's posts, his client looks up her announcement and connects directly to her announced outbox relays. </p> <p class="text-sm text-primary-lighter dark:text-gray-300 mt-2"> This targeted approach is simple and efficient. </p> </div> <!-- Item 3 --> <div class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger" > <img src="/robots/relays.png" class="mb-4 h-70 block mx-auto" /> <h3 class="font-semibold mb-2">Users can switch relays when needed</h3> <p class="text-sm text-primary-lighter dark:text-gray-300"> If Patricia's current relay bans her or shuts down, she can easily switch to different relays — perhaps some run by friends, a paid service, or her own server. </p> <p class="mt-2 text-sm text-primary-lighter dark:text-gray-300"> She simply publishes a new announcement and continues to post without losing her audience. </p> </div> <!-- Item 4 --> <div class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger" > <img src="/robots/clients.png" class="mb-4 h-70 block mx-auto" /> <h3 class="font-semibold mb-2">Clients track relay changes</h3> <p class="text-sm text-primary-lighter dark:text-gray-300"> Florian's client continuously monitors for updates to Patricia's relay list. </p> <p class="text-sm text-primary-lighter dark:text-gray-300 mt-2"> When she switches relays, his client eventually starts querying her new locations, ensuring he never misses her posts even as the network topology changes. </p> </div> <!-- Item 5 --> <div class="border-2 shadow-lg border-secondary dark:border-dotcom-light rounded-xl p-5 scroll-reveal-stagger" > <img src="/robots/collection.png" class="mb-4 h-70 block mx-auto" /> <h3 class="font-semibold mb-2">Smart clients manage everything</h3> <p class="text-sm text-primary-lighter dark:text-gray-300"> From the publisher side to the follower side clients behave smartly, keeping a local state and reacting to new information in order to ensure that the flow of information continues. </p> <p class="mt-2 text-sm text-primary-lighter dark:text-gray-300"> After all, these notes are important, it would be sad to miss too many of them. </p> </div> </div> <div class="mt-8"> <a href="https://how-nostr-works.pages.dev/#/outbox" target="_blank" class="text-sm font-medium text-primary dark:text-white inline-flex items-center" > See a visual interactive explanation <span class="ml-1">›</span> </a> </div> </section> <!-- FAQ Heading --> <section class="text-center px-6 mb-16 scroll-reveal"> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary-lighter dark:text-gray-300 text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">contact_support</span> FAQ </span> <h2 class="text-2xl md:text-3xl font-bold mb-2">I've got some questions!</h2> <p class="text-primary-lighter dark:text-gray-300 text-base max-w-xl mx-auto"> It may sound like Nostr is very good, but what about these hard issues? </p> </section> <!-- FAQ Items --> <section class="px-6 max-w-3xl mx-auto mb-32"> <div class="space-y-4 text-sm"> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> What is a "protocol"? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> A protocol is like a common language that multiple different software can use to talk to each other, it's like <b>e-mail</b>, <b>HTML</b> or <b>HTTP</b>. </p> <p> When we say "protocol" we mean that there is no need to use a specific app in order to be in Nostr: there are many apps that talk the same language and can be used (mostly) interchangeably — and each has its own take on how to do and display things. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> How does Nostr handle spam and unwanted content? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> In the default feed you never see any spam, because clients will only fetch information from people that <i>you</i> follow. In that sense no one can "push" spam into you. </p> <p> It's trickier when you want to see, for example, replies to your posts, in that case a client might be programmed to fetch anything that <i>claims</i> to be a reply <i>from anyone</i>, which might include spam. </p> <p> The way we can deal with it on Nostr is by restricting our area of contact with the spam: for example, some clients may easily decide to only display replies that come from people followed by people you follow. More refined strategies involve announcing and then only reading notes from relays known to be "safe" according to your criteria (could be relays that require payment, relays that do screening for humans, relays that only accept members of certain communities or political affiliations etc). </p> <p> There are no perfect solutions. But these do not exist anywhere, centralized platforms are also full of spam. Nostr at least isn't naïve and tries to build resiliency from the start. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> Will Nostr scale effectively with massive user adoption? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> Yes, Nostr is just a basic client-server architecture. And the fact that users can naturally spread among hundreds of different relays while clients can query dozens of relays that they're interested in at the same time means the network has a natural load balancer (which doesn't prevent a single relay from having its own internal load balancer either). </p> <p> Another (almost the opposite) concern that may be raised is with problems arising from clients having to connect to too many relays if the profiles being followed for whatever reason decide to spread way too much, but this shouldn't be a problem either because people tend to follow many accounts with similar content and these will tend to share relays. Still, if it happens, it's cheap for native apps to open many hundreds of WebSocket connections simultaneously (as they will be getting very few data in each of those). For web apps that isn't so hard, but we can still go up to a few hundreds without big problems. Regardless of any of that, in any complete enough app that wants to display a "following feed" it's already necessary to store events in a local database, and that will make all these issues easy to deal with as you can do the event requests in batches instead of all at once. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> What protections does Nostr offer against online harassment? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> Harassment is similar to spam in the sense that anyone can still create the undesired content and publish to the relays that accept them. All the techniques mentioned in avoiding spam can also be applied in this case, but if we're talking about specific individuals with a permanent identity and not only an army of bots in this case the problem becomes easier, as those individuals can just be blocked by their target and their content will vanish. Presumably friends of such target will also block, and creative solutions involving shared blocklists can be created such that some people don't even have to click the block button directly. </p> <p> Other approaches involving, for example, relays with restricted read (that can emulate "protected account"/"only friends" features seen in centralized platforms) can further improve this. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> Why not just use Mastodon/Fediverse? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> There are many problems with Mastodon, mostly due to the fact that it doesn't rely on any cryptography. Because it cannot do the multi-master approach of Nostr due to lack of cryptography, identities are assumed to be "owned" by the server, which is fully trusted by its tenants. Mastodon server owners can do all the harm centralized platforms can do to their underlings, which are completely helpless in case of misbehavior or even in the normal case where a server owner loses their server or decides to shut down for whatever reason. </p> <p> Worse than that, for many of its purported features, such as blocking or direct messages, users have to also trust owners of the other servers. </p> <p> There are also problems with reliance on the DNS system, but we don't have to talk about those. </p> <p> The most interesting feature of Mastodon is that by its nature it creates communities with shared values that grow in each of its servers. Or, should I say, that should be a feature if it actually worked like that. In fact these are not really communities, but a mashup of users that may share some interests among each other, but also have other interests and those other interests end up polluting the supposed "community" with things that do not interest the other users. </p> <p> Nostr, on the other hand, can create real communities around relays, specifically because users don't have to fully belong to those relays, but can go to them only for some of their needs and go to other relays for other needs. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> Why not just use Bluesky/ATProto? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p>Bluesky has many problems, the two most pronounced are:</p> <ol class="list-inside list-disc" role="list"> <li> Identity centralization: all accounts belong to <b>PLC</b>, a database ran by a central entity that can censor at will — or, alternatively, they can belong to a DNS domain, which is cumbersome, also censorable, risky and is not expected to be used by many anyway; </li> <li> Data centralization: because the <code>Relay-AppView-Client</code> flow assumes only one canonical source of data at each step (unlike Nostr multi-master architecture) that source is always a server that has power to censor, shadowban, reorder data and so on. </li> </ol> <p> <code>Clients</code> are assumed to be dumb and trust the <code>AppView</code>, and here you have room for all sorts of undesired shenanigans. Then AppViews also assume to source their data from a single <code>Relay</code>, and here you have room for the same effect. </p> <p> You could argue that Bluesky <code>Clients</code> could become smart and start sourcing data from multiple <code>AppViews</code>, or from multiple Relays, or that the <code>AppViews</code> could rely on multiple <code>Relays</code>, or that the <code>Clients</code> could talk directly to the <code>PDSes</code> — and all of that is possible and would indeed bring solutions, but notice that if those things started happening Bluesky would end up becoming Nostr, except with more steps. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> Are economic incentives aligned to keep relays operational? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> Yes, <a target="_blank" class="underline hover:brightness-[80%]" href="https://njump.me/nevent1qqsxstdgkge3k9mtezv4z4lpp88p3lnqta9k0k6n8hex0a4zv62pdmqzyqalp33lewf5vdq847t6te0wvnags0gs0mu72kz8938tn24wlfze6pfalk0" >this clip</a > answers it well. </p> <p> But basically the answer is the same as the question about scale: if users can go to whatever relay they want we'll see relays ran by all sorts of people and entities. Running servers is very cheap, and a relay can run on a $5/mo server and house at least a few thousand users. It's not hard to imagine relays ran by communities, individuals who just want to be useful to others, big organizations wanting to gain good will with some parts of the public, but also companies, client makers, and, of course, dedicated entities who sell relay hosting for very cheap. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> If content is spread across multiple relays how can I be sure I'm seeing everything? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> It's not a feature of the world at large to be able to see or hear everything that is happening everywhere at all times. Nostr inherits that property from the world, making it so that you can only see what you focus your attention on (and you're allowed to see by the relay that hosts that information). </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> How does search work? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> It's only possible to search on what you have seen, so search engines will always have to crawl some parts of the network they chose to and index those to enable public search. The word "chose" is employed because, as we know, there can't be a "global" view of the network (and no one would want such a thing anyway as it would be full of spam), so indexers have to choose. This is not different from Google deciding what websites to index. </p> <p> On the other hand, it's surprisingly doable for clients to store all the posts from people you follow, or all the posts you have seen or interacted with over time (since it's just text, a huge amount of notes can fit in the same space that would otherwise be required to store a single photo, for example) then provide local search over that. That kind of search will be sufficient for most of the cases you would reach out for a search bar in a centralized platform (which is to search for things that you have seen before), and perhaps even more useful since it would naturally filter out all the unrelated garbage. </p> <p> Last, niche or community-oriented relays can also provide very useful search capabilities by just indexing the notes they have stored locally, already filtered and scoped to that relay's topic or cohort (imagine searching over a Discord, Slack or Telegram group, for example). </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> How can I discover new content from people I don't already follow if there are no algorithms? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> The most basic way to do that is by following the natural habits used by most centralized social platforms users since a long time ago: by looking at the people you follow and whom they're interacting with. </p> <p> But also it's not true that Nostr doesn't have algorithms. Nostr can have algorithms of all kinds: manual, automatic, AI-powered or rule-based. Some of these algorithms can be run entirely locally on clients (for example, surfacing posts from the times when you were not online, or from people that make fewer posts), while other algorithms can be provided by all sorts of relays, either by naturally surfacing posts from a community of people you don't follow or by dedicated relays that have the stated purpose of curating content desirable for a target audience or even by targeting specific users. </p> </div> </details> <!-- FAQ Item --> <details class="border-2 shadow border-secondary dark:border-dotcom-light rounded-xl p-4 scroll-reveal-stagger" > <summary class="flex justify-between w-full font-bold cursor-pointer"> Is Nostr related to Bitcoin? </summary> <div class="text-gray-700 dark:text-gray-300 leading-relaxed space-y-2 mt-2"> <p> Nostr uses the same cryptographic principles of Bitcoin and was kickstarted mostly by a community of Bitcoiners, so it has disproportionately attracted the attention of Bitcoiners at the start, but aside from that it doesn't have any relationship with Bitcoin. It doesn't depend on Bitcoin for anything and you don't have to know or have or care about any Bitcoin in order to use Nostr. </p> <p> What about "zaps"? Zaps are a standard for tipping Nostr content using Bitcoin that is implemented by some Nostr clients, but it's fully and completely optional and if you don't care about Bitcoin you don't have to bother about it. </p> </div> </details> </div> </section> <div id="/.com-services" class="-translate-y-8"></div> <!-- .com Services --> <section class="px-6 max-w-5xl mx-auto mb-24 font-lnbits rounded-xl scroll-reveal"> <div class="rounded-xl p-10 bg-dotcom-dark/85 dark:bg-secondary/25 shadow-lg"> <h2 class="text-xl md:text-2xl font-bold mb-6 text-dotcom-light"> <a href="https://my.nostr.com/" target="_blank" class="inline-block border-dotcom-light border-b-4 hover:brightness-[150%] transition" >nostr.com</a > paid services </h2> <p class="text-white text-sm mb-2"> Remember when we said Nostr didn't have any owners or organizations that controlled it? This is also not an official website of the protocol. It's ran by <a href="https://lnbits.com/" target="_blank" class="border-b-2 border-transparent hover:border-lnbits-light hover:brightness-[250%] transition text-lnbits-light font-bold text-lg inline-block" >LNbits</a > and we're proud supporters, pioneers and enthusiasts of Nostr. </p> <p class="text-white text-sm mb-6">And we're selling stuff!</p> <div class="flex flex-col sm:flex-row items-center gap-3"> <a href="https://my.nostr.com/" class="bg-dotcom-light/90 text-dotcom-dark font-medium px-5 py-2 rounded-full transition hover:bg-dotcom-light" target="_blank" > Buy a @nostr.com username </a> <a href="https://shop.lnbits.com/product-category/nostr" class="text-sm font-medium text-dotcom-light transition hover:underline" target="_blank" > Shop physical tools and Nostr merch </a> </div> </div> </section> <!-- Quotations --> <section class="px-6 max-w-6xl mx-auto mb-24 scroll-reveal"> <div class="text-center mb-12"> <span class="inline-flex items-center bg-grayish dark:bg-gray-700 text-primary dark:text-white text-xs font-medium px-3 py-1 rounded-full mb-3" > <span class="material-symbols-outlined mr-1">speaker_notes</span> Opinion </span> <h2 class="text-2xl md:text-3xl font-bold mb-2">What people are saying</h2> <p class="text-primary-lighter dark:text-gray-300 text-base max-w-xl mx-auto"> Quotes from those who know better and decided to like Nostr. </p> </div> <div class="grid md:grid-cols-3 gap-8"> <div class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger" > <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div> <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4"> No one owns Nostr, no one can own Nostr, it's an open-source protocol. No one can build a fence to stop the flow of information. </blockquote> <cite class="text-xs text-grayish dark:text-gray-400 font-medium"> — <a href="https://www.youtube.com/watch?v=MaxXvcr181c" target="_blank" class="text-secondary dark:text-dotcom-light hover:underline" >Uncle Bob</a > </cite> </div> <div class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger" > <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div> <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4"> Nostr is an open protocol. <div class="mt-2"> If a platform is a silo, a protocol is a river: no one owns it, and everyone is free to swim. </div> </blockquote> <cite class="text-xs text-grayish dark:text-gray-400 font-medium"> — <a href="https://x.com/Snowden/status/1620789340199882752" target="_blank" class="text-secondary dark:text-dotcom-light hover:underline" >Edward Snowden</a > </cite> </div> <div class="rounded-xl p-6 shadow-lg border-l-4 border-secondary dark:border-dotcom-light flex flex-col justify-between bg-white dark:bg-primary-lighter scroll-reveal-stagger" > <div class="text-4xl text-secondary dark:text-dotcom-light mb-4">"</div> <blockquote class="text-primary-lighter dark:text-gray-300 leading-relaxed mb-4"> I want to claim that Nostr has discovered a new fundamental architecture for distributed protocols. Not federated, not P2P. </blockquote> <cite class="text-xs text-grayish dark:text-gray-400 font-medium"> — <a href="https://newsletter.squishy.computer/p/natures-many-attempts-to-evolve-a" target="_blank" class="text-secondary dark:text-dotcom-light hover:underline" >Gordon Brander</a > </cite> </div> </div> </section> <!-- Footer --> <footer class="px-6 max-w-6xl mx-auto mt-20 text-sm text-primary-lighter dark:text-gray-300"> <div class="flex justify-between gap-10 mb-10 mx-4"> <div> <span class="font-bold text-primary dark:text-white text-xl">nostr</span> </div> <div> <h4 class="text-primary dark:text-white font-semibold mb-2">Resources</h4> <ul class="space-y-1"> <li> <a @click="showModal()" class="cursor-pointer hover:underline"></a> </li> <li> <a target="_blank" href="https://nostrapps.com" class="hover:underline" >Apps Directory</a > </li> <li> <a target="_blank" href="https://github.com/coracle-social/how-to-nostr/tree/master" class="hover:underline" >The Book</a > </li> </ul> </div> </div> <div class="border-t border-secondary dark:border-dotcom-light py-2 flex justify-between items-center text-xs" > <p> Made with <span class="text-red-500">❤️</span> by the <a href="https://lnbits.com/" target="_blank" class="hover:underline text-lnbits-dark dark:text-lnbits-light dark:font-semibold" >LNbits</a > team. </p> <div class="flex space-x-4 mt-2 md:mt-0"> <a href="https://npub.world/npub10efcj7x65z2ak6vd69xr8f2hvqwuaqrhlygl3yqa4y63hfvc02mqwzaeh3" target="_blank" class="hover:font-bold hover:text-lnbits-dark material-symbols-outlined" >raven</a > </div> </div> </footer> <script> // scroll reveal animation document.addEventListener("DOMContentLoaded", initScrollReveal) function initScrollReveal() { const observerOptions = { threshold: 0.1, rootMargin: "0px 0px -50px 0px" } const observer = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add("revealed") } }) }, observerOptions) // observe all elements with scroll reveal classes document .querySelectorAll(".scroll-reveal, .scroll-reveal-slow, .scroll-reveal-stagger") .forEach(el => { observer.observe(el) }) } </script> <script> // swap elements that have the same data-swap attribute, with 50% chance const swappers = {} document.querySelectorAll("[data-swap]").forEach(el => { let id = el.dataset.swap if (swappers[id]) { if (Math.random() < 0.5) { const parent1 = swappers[id].parentNode el.parentNode.appendChild(swappers[id]) parent1.appendChild(el) } delete swappers[id] } else { swappers[id] = el } }) </script> <script> function darkMode() { return { isDark: false, init() { const systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches const savedTheme = localStorage.getItem("theme") this.isDark = savedTheme ? savedTheme === "dark" : systemPrefersDark }, toggle() { this.isDark = !this.isDark localStorage.setItem("theme", this.isDark ? "dark" : "light") } } } </script> <script> function modalToggler() { return { showingModal: false, async showModal() { this.showingModal = true document.body.classList.add("overflow-hidden") const modal = document.getElementById("modal") if (modal.children.length === 0) { const { renderModal } = await import("./main.js") renderModal(modal, () => { this.hideModal() }) } }, hideModal() { this.showingModal = false document.body.classList.remove("overflow-hidden") } } } </script> <!-- Key Generation Modal --> <div class="fixed flex items-center justify-center inset-0 w-full transition-opacity bg-grayish/80 items-center justify-center min-h-screen sm:h-fit z-40" x-show="showingModal" id="modal" x-transition:enter="transition ease-out duration-300" x-transition:enter-start="opacity-0" x-transition:enter-end="opacity-100" x-transition:leave="transition ease-in duration-200" x-transition:leave-start="opacity-100" x-transition:leave-end="opacity-0" @click="if ($event.target === $event.currentTarget) hideModal()" ></div> <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fcb2a67d0a8e4c89af3e1e3492b44658","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script> <script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fcb2a67d0a8e4c89af3e1e3492b44658","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script> </body> </html>
Resolver
Resolver ASN
AS25139
Resolver IP
197.249.0.241
Resolver Network Name
TVCABO - Comunicacoes Multimedia, Lda
Report ID
20250801T023137Z_webconnectivity_MZ_25139_n1_e4UZkUnzszFm2Yj4
Platform
ios
Software Name
ooniprobe-ios-unattended (5.1.0)
Measurement Engine
ooniprobe-engine (3.26.0)