From 9e25ee4080cdacb90b0602d16efe3d263edd94d2 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 21 Sep 2025 06:21:05 +0000 Subject: [PATCH 01/24] Automated update of relay data - Sun Sep 21 06:21:05 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 479 ++++++++++++++------------- 1 file changed, 245 insertions(+), 234 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 2f6ef4764..046ceff22 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,264 +1,275 @@ Relay URL,Latitude,Longitude -relay.laantungir.net,-19.4692,-42.5315 -relay.endfiat.money,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -shu04.shugur.net,25.2604,55.2989 -relay.bitcoinartclock.com,50.4754,12.3683 -relay.nostromo.social,49.4543,11.0746 -nostr.liberty.fans,36.9104,-89.5875 -roles-az-achieving-somebody.trycloudflare.com,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.nostr.wirednet.jp,34.706,135.493 +nostr.tac.lol,47.4748,-122.273 +relay.javi.space,43.4633,11.8796 nostr.einundzwanzig.space,50.1109,8.68213 -relay.21e6.cz,50.1682,14.0546 -relay04.lnfi.network,39.0997,-94.5786 -relay.chorus.community,50.1109,8.68213 -relay.nostr.place,32.7767,-96.797 -relay.vrtmrz.net,43.6532,-79.3832 -noxir.kpherox.dev,34.8587,135.509 -wot.nostr.net,43.6532,-79.3832 -relay.cypherflow.ai,48.8566,2.35222 -wot.sudocarlos.com,51.5072,-0.127586 -nostr.jerrynya.fun,31.2304,121.474 -nostr2.girino.org,43.6532,-79.3832 -nostrings-relay-dev.fly.dev,41.8781,-87.6298 -fanfares.nostr1.com,40.7128,-74.006 -nostr.red5d.dev,43.6532,-79.3832 -nostr.hifish.org,47.4043,8.57398 -nostr.now,36.55,139.733 -relay.nostr.band,60.1699,24.9384 -relay.wavlake.com,41.2619,-95.8608 -nostr.bilthon.dev,25.8128,-80.2377 -khatru.nostrver.se,51.8933,4.42083 -relay.bitcoindistrict.org,43.6532,-79.3832 -nostr.makibisskey.work,43.6532,-79.3832 -relay.nostraddress.com,43.6532,-79.3832 -relay.jmoose.rocks,60.1699,24.9384 +nostr.kalf.org,52.3676,4.90414 +wot.dtonon.com,43.6532,-79.3832 +nostr-01.yakihonne.com,1.32123,103.695 +wot.basspistol.org,49.4521,11.0767 +relay.puresignal.news,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 +nostr-relay.nextblockvending.com,47.674,-122.122 +relay03.lnfi.network,39.0997,-94.5786 +nproxy.kristapsk.lv,60.1699,24.9384 +relay.toastr.net,40.8054,-74.0241 relay.davidebtc.me,51.5072,-0.127586 -a.nos.lol,50.4754,12.3683 -nostr.tadryanom.me,43.6532,-79.3832 -relay.nostrdice.com,-33.8688,151.209 -relay.lumina.rocks,49.0291,8.35695 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 +wot.nostr.net,43.6532,-79.3832 relay.mattybs.lol,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 -nostream.breadslice.com,43.6532,-79.3832 -nostr.vulpem.com,49.4543,11.0746 -nostr.rohoss.com,50.1109,8.68213 -articles.layer3.news,37.3387,-121.885 +relay.zone667.com,60.1699,24.9384 +nostr.kungfu-g.rip,33.7946,-84.4488 +relay.mccormick.cx,52.3563,4.95714 +relay.dwadziesciajeden.pl,52.2297,21.0122 +nostr.data.haus,50.4754,12.3683 +vitor.nostr1.com,40.7128,-74.006 +purpura.cloud,43.6532,-79.3832 +relay2.angor.io,48.1046,11.6002 nos.lol,50.4754,12.3683 -relay.artx.market,43.652,-79.3633 -wot.sebastix.social,51.8933,4.42083 -alien.macneilmediagroup.com,43.6532,-79.3832 -relay.unknown.cloud,43.6532,-79.3832 -nostr.lojong.info,43.6532,-79.3832 -nostr.zenon.network,43.5009,-70.4428 -orangesync.tech,50.1109,8.68213 +nostr.rohoss.com,50.1109,8.68213 +strfry.bonsai.com,37.8715,-122.273 +relay.fountain.fm,39.0997,-94.5786 +relay.npubhaus.com,43.6532,-79.3832 +relay.nostr.wirednet.jp,34.706,135.493 +soloco.nl,43.6532,-79.3832 +shu01.shugur.net,21.4902,39.2246 nostr.davidebtc.me,51.5072,-0.127586 -internationalright-wing.org,-22.5022,-48.7114 -nostr.rikmeijer.nl,50.4754,12.3683 +pyramid.fiatjaf.com,50.1109,8.68213 +relay.ditto.pub,43.6532,-79.3832 +relay.nostr.vet,52.6467,4.7395 +relay.wavlake.com,41.2619,-95.8608 +ribo.eu.nostria.app,52.3676,4.90414 +relay.ngengine.org,43.6532,-79.3832 +relay.bitcoinveneto.org,64.1466,-21.9426 +no.str.cr,9.92857,-84.0528 +relay.primal.net,43.6532,-79.3832 ynostr.yael.at,60.1699,24.9384 -ithurtswhenip.ee,51.223,6.78245 -relay.wellorder.net,45.5201,-122.99 -nostr.sathoarder.com,48.5734,7.75211 +nostr.camalolo.com,24.1469,120.684 purplerelay.com,50.1109,8.68213 -yabu.me,35.6092,139.73 -nostr.88mph.life,43.6532,-79.3832 -nostr.overmind.lol,43.6532,-79.3832 -rnostr.breadslice.com,43.6532,-79.3832 -zap.watch,45.5029,-73.5723 -wot.basspistol.org,49.4521,11.0767 -shu01.shugur.net,21.4902,39.2246 -relay.electriclifestyle.com,26.2897,-80.1293 -relay.mccormick.cx,52.3563,4.95714 -nostr.middling.mydns.jp,35.8099,140.12 -nostr.smut.cloud,43.6532,-79.3832 -satsage.xyz,37.3986,-121.964 -srtrelay.c-stellar.net,43.6532,-79.3832 -nostr.0x7e.xyz,47.4988,8.72369 -shu02.shugur.net,21.4902,39.2246 -nostrelites.org,41.8781,-87.6298 -relay-admin.thaliyal.com,40.8218,-74.45 -wot.soundhsa.com,34.0479,-118.256 -nostrcheck.me,43.6532,-79.3832 -relay.nostrhub.tech,49.4543,11.0746 -relay.stream.labs.h3.se,59.4016,17.9455 -nostrelay.memory-art.xyz,43.6532,-79.3832 -nostr.n7ekb.net,47.4941,-122.294 -relay.nosto.re,51.8933,4.42083 -nostr.girino.org,43.6532,-79.3832 -relay.siamdev.cc,13.9178,100.424 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -orangepiller.org,60.1699,24.9384 -nostr.plantroon.com,50.1013,8.62643 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.primal.net,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 -relay.hasenpfeffr.com,39.0438,-77.4874 -strfry.openhoofd.nl,51.9229,4.40833 -relay.aloftus.io,34.0881,-118.379 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -ribo.af.nostria.app,-26.2041,28.0473 -nostr.tac.lol,47.4748,-122.273 -relay.satlantis.io,32.8769,-80.0114 -nostr.azzamo.net,52.2633,21.0283 -strfry.bonsai.com,37.8715,-122.273 -relay.agora.social,50.7383,15.0648 -nostr-relay.amethyst.name,39.0067,-77.4291 -relay.toastr.net,40.8054,-74.0241 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 +wheat.happytavern.co,43.6532,-79.3832 +nostr.lostr.space,43.6532,-79.3832 +relay.tagayasu.xyz,43.6715,-79.38 +relay.varke.eu,52.6921,6.19372 +free.relayted.de,50.1109,8.68213 nostr.thebiglake.org,32.71,-96.6745 -nostr-relay.nextblockvending.com,47.674,-122.122 -vitor.nostr1.com,40.7057,-74.0136 -relay.btcforplebs.com,43.6532,-79.3832 -relay.g1sms.fr,43.9432,2.07537 -nostr.jfischer.org,49.0291,8.35696 -nostr.mikoshi.de,52.52,13.405 -relay.notoshi.win,13.7829,100.546 -pyramid.fiatjaf.com,50.1109,8.68213 -relay.coinos.io,43.6532,-79.3832 -relay.freeplace.nl,52.3676,4.90414 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.copylaradio.com,51.223,6.78245 -relay.exit.pub,50.4754,12.3683 -freelay.sovbit.host,64.1476,-21.9392 -nostr.satstralia.com,64.1476,-21.9392 -nostr.l484.com,30.2944,-97.6223 -nostr.rblb.it,43.4633,11.8796 -nostr.2b9t.xyz,34.0549,-118.243 -nostr.dlsouza.lol,50.1109,8.68213 -strfry.shock.network,41.8959,-88.2169 -offchain.pub,36.1809,-115.241 -nostr-01.yakihonne.com,1.32123,103.695 -nostr.kungfu-g.rip,33.7946,-84.4488 -relay.letsfo.com,51.098,17.0321 -relay.lifpay.me,1.35208,103.82 -relay.damus.io,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -relayrs.notoshi.win,43.6532,-79.3832 +nostr.lojong.info,43.6532,-79.3832 +nostr.now,36.55,139.733 +relay.jmoose.rocks,60.1699,24.9384 +relay.holzeis.me,43.6532,-79.3832 +nostr.roundrockbitcoiners.com,40.8054,-74.0241 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 relay2.ngengine.org,43.6532,-79.3832 -portal-relay.pareto.space,49.4543,11.0746 -inbox.azzamo.net,52.2633,21.0283 +nostr.snowbla.de,60.1699,24.9384 +4u2ni0zjbjvni.clorecloud.net,43.6532,-79.3832 +shu04.shugur.net,25.2604,55.2989 +relay.fr13nd5.com,52.5233,13.3426 +nostr.vulpem.com,49.4543,11.0746 +temp.iris.to,43.6532,-79.3832 +x.kojira.io,43.6532,-79.3832 +adre.su,59.9311,30.3609 nostr-dev.wellorder.net,45.5201,-122.99 -nostr.stakey.net,52.3676,4.90414 -relay.13room.space,43.6532,-79.3832 -relay.fountain.fm,39.0997,-94.5786 -black.nostrcity.club,41.8781,-87.6298 -nostr-2.21crypto.ch,47.4988,8.72369 -dev-nostr.bityacht.io,25.0797,121.234 +nostr.mom,50.4754,12.3683 +relay.nostr.place,32.7767,-96.797 +wot.nostr.place,30.2672,-97.7431 +nostr.carroarmato0.be,50.9928,3.26317 +nostrelay.circum.space,51.2217,6.77616 +relay.chorus.community,50.1109,8.68213 +relay.nostr.net,50.4754,12.3683 +relay.nostr-check.me,43.6532,-79.3832 +relay.nostrhub.fr,48.1046,11.6002 +relay.nostraddress.com,43.6532,-79.3832 +nostr.rblb.it,43.4633,11.8796 +nostr.red5d.dev,43.6532,-79.3832 santo.iguanatech.net,40.8302,-74.1299 -relay.angor.io,48.1046,11.6002 -relay.tagayasu.xyz,43.6715,-79.38 -relay.npubhaus.com,43.6532,-79.3832 -relay01.lnfi.network,39.0997,-94.5786 -nostr.myshosholoza.co.za,52.3676,4.90414 relay02.lnfi.network,39.0997,-94.5786 -gnostr.com,40.9017,29.1616 -nostr.sagaciousd.com,49.2827,-123.121 -nostr.night7.space,50.4754,12.3683 +relay.21e6.cz,50.1682,14.0546 +a.nos.lol,50.4754,12.3683 +shu02.shugur.net,21.4902,39.2246 schnorr.me,43.6532,-79.3832 -nostr.blankfors.se,60.1699,24.9384 -relay.mostro.network,40.8302,-74.1299 -purpura.cloud,43.6532,-79.3832 -ribo.eu.nostria.app,52.3676,4.90414 -vidono.apps.slidestr.net,48.8566,2.35222 -wheat.happytavern.co,43.6532,-79.3832 -nostr.faultables.net,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -relay.nostrhub.fr,48.1046,11.6002 +nostr.n7ekb.net,47.4941,-122.294 +wot.shaving.kiwi,43.6532,-79.3832 +dev-nostr.bityacht.io,25.0797,121.234 +relay.credenso.cafe,43.1149,-80.7228 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.mess.ch,47.3591,8.55292 +inbox.azzamo.net,52.2633,21.0283 +prl.plus,55.7623,37.6381 +yabu.me,35.6092,139.73 +relayrs.notoshi.win,43.6532,-79.3832 +premium.primal.net,43.6532,-79.3832 +nostr.coincrowd.fund,39.0438,-77.4874 +nostr.2b9t.xyz,34.0549,-118.243 nostr.thaliyal.com,40.8218,-74.45 -relay.holzeis.me,43.6532,-79.3832 -relay.nostriot.com,41.5695,-83.9786 -nostr.openhoofd.nl,51.9229,4.40833 -relay.nostr.vet,52.6467,4.7395 -nostr.camalolo.com,24.1469,120.684 +relay.exit.pub,50.4754,12.3683 +nostr.jfischer.org,49.0291,8.35696 relay.origin.land,35.6673,139.751 +nostr.myshosholoza.co.za,52.3676,4.90414 +relay.nostriot.com,41.5695,-83.9786 +relay.btcforplebs.com,43.6532,-79.3832 relay.chakany.systems,43.6532,-79.3832 -relay.0xchat.com,1.35208,103.82 -nostr.mom,50.4754,12.3683 -4u2ni0zjbjvni.clorecloud.net,43.6532,-79.3832 -prl.plus,55.7623,37.6381 -relay.moinsen.com,50.4754,12.3683 +nostr.openhoofd.nl,51.9229,4.40833 +nostrcheck.me,43.6532,-79.3832 +nostr.plantroon.com,50.1013,8.62643 +satsage.xyz,37.3986,-121.964 +nostr.faultables.net,43.6532,-79.3832 +nostr.calitabby.net,39.9268,-75.0246 +relay.freeplace.nl,52.3676,4.90414 +relay.nostrhub.tech,49.4543,11.0746 +roles-az-achieving-somebody.trycloudflare.com,43.6532,-79.3832 +relay.arx-ccn.com,50.4754,12.3683 +cyberspace.nostr1.com,40.7128,-74.006 +nostr.smut.cloud,43.6532,-79.3832 nostr-02.czas.top,53.471,9.88208 -relay.sigit.io,50.4754,12.3683 -relay.nostrcheck.me,43.6532,-79.3832 -relay03.lnfi.network,39.0997,-94.5786 -relay.sincensura.org,43.6532,-79.3832 -nostr.coincards.com,53.5501,-113.469 -nostr-03.dorafactory.org,1.35208,103.82 -relay.credenso.cafe,43.1149,-80.7228 -nostr.fbxl.net,48.3809,-89.2477 -relay.bullishbounty.com,43.6532,-79.3832 -nos.xmark.cc,50.6924,3.20113 -x.kojira.io,43.6532,-79.3832 -wot.sovbit.host,64.1466,-21.9426 -shu05.shugur.net,48.8566,2.35222 -nostr.carroarmato0.be,50.9928,3.26317 +relay.tapestry.ninja,40.8054,-74.0241 +relay.mostro.network,40.8302,-74.1299 +wot.brightbolt.net,47.6735,-116.781 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.rikmeijer.nl,50.4754,12.3683 +relay.artx.market,43.652,-79.3633 +strfry.felixzieger.de,50.1013,8.62643 +relay.seq1.net,43.6532,-79.3832 relay.cosmicbolt.net,37.3986,-121.964 +relay.electriclifestyle.com,26.2897,-80.1293 r.bitcoinhold.net,43.6532,-79.3832 -nostr.diakod.com,43.6532,-79.3832 +nostr-relay.amethyst.name,39.0067,-77.4291 +relay.stream.labs.h3.se,59.4016,17.9455 +relay.unknown.cloud,43.6532,-79.3832 +nostr-02.yakihonne.com,1.32123,103.695 +relay.coinos.io,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 +relay-dev.satlantis.io,40.8302,-74.1299 +nostream.breadslice.com,43.6532,-79.3832 +relay.fundstr.me,42.3601,-71.0589 +nostr.oxtr.dev,50.4754,12.3683 +nos.xmark.cc,50.6924,3.20113 +nostr.mikoshi.de,50.1109,8.68213 +relay.magiccity.live,25.8128,-80.2377 +nostr-verified.wellorder.net,45.5201,-122.99 +nostr.makibisskey.work,43.6532,-79.3832 +wot.nostr.party,36.1627,-86.7816 +relay.copylaradio.com,51.223,6.78245 +nostr.sathoarder.com,48.5734,7.75211 +relay.jeffg.fyi,43.6532,-79.3832 +relay.wellorder.net,45.5201,-122.99 +nostr.ovia.to,43.6532,-79.3832 +black.nostrcity.club,41.8781,-87.6298 +relay.nostrcheck.me,43.6532,-79.3832 nostr-relay.cbrx.io,43.6532,-79.3832 -nostr.coincrowd.fund,39.0438,-77.4874 -cyberspace.nostr1.com,40.7128,-74.006 -relay.barine.co,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -no.str.cr,9.92857,-84.0528 -nostr.casa21.space,43.6532,-79.3832 +nostr-03.dorafactory.org,1.35208,103.82 +nostr-relay.zimage.com,34.282,-118.439 +relay.sigit.io,50.4754,12.3683 +relay.laantungir.net,-19.4692,-42.5315 +relay-admin.thaliyal.com,40.8218,-74.45 relay.mwaters.net,50.9871,2.12554 -relay.magiccity.live,25.8128,-80.2377 -relayone.soundhsa.com,34.0479,-118.256 -slick.mjex.me,39.048,-77.4817 -relay.utxo.farm,35.6916,139.768 -theoutpost.life,64.1476,-21.9392 -nostr.hekster.org,37.3986,-121.964 -strfry.felixzieger.de,50.1013,8.62643 -relay.mess.ch,47.3591,8.55292 -wot.codingarena.top,50.4754,12.3683 -nostrelay.circum.space,51.2217,6.77616 -nostr-relay.online,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 +relay.lumina.rocks,49.0291,8.35695 +nostr.satstralia.com,64.1476,-21.9392 +nostr.sagaciousd.com,49.2827,-123.121 +relay.bullishbounty.com,43.6532,-79.3832 wot.dergigi.com,64.1476,-21.9392 -wot.brightbolt.net,47.6735,-116.781 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -wot.nostr.place,30.2672,-97.7431 -ribo.us.nostria.app,41.5868,-93.625 -relay.nostr.net,50.4754,12.3683 -nostr-02.dorafactory.org,1.35208,103.82 -relay.tapestry.ninja,40.8054,-74.0241 -adre.su,59.9311,30.3609 -librerelay.aaroniumii.com,43.6532,-79.3832 -nostr-pub.wellorder.net,45.5201,-122.99 -kitchen.zap.cooking,43.6532,-79.3832 +relay.vrtmrz.net,43.6532,-79.3832 +nostr.0x7e.xyz,47.4988,8.72369 +articles.layer3.news,37.3387,-121.885 +relay.digitalezukunft.cyou,45.5019,-73.5674 +nostr.notribe.net,40.8302,-74.1299 nostr.21crypto.ch,47.4988,8.72369 -nostr-02.yakihonne.com,1.32123,103.695 -relay.javi.space,43.4633,11.8796 -nostr.ser1.net,12.9716,77.5946 -relay-rpi.edufeed.org,49.4543,11.0746 -premium.primal.net,43.6532,-79.3832 -relay.degmods.com,50.4754,12.3683 -relay.arx-ccn.com,50.4754,12.3683 -nostr.chaima.info,51.223,6.78245 +relay.lifpay.me,1.35208,103.82 +relay.g1sms.fr,43.9432,2.07537 +relay.snort.social,43.6532,-79.3832 +relay.getsafebox.app,43.6532,-79.3832 +relay.moinsen.com,50.4754,12.3683 +nostr.blankfors.se,60.1699,24.9384 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +orangesync.tech,50.1109,8.68213 +relay.ru.ac.th,13.7584,100.622 +orangepiller.org,60.1699,24.9384 +relay.nostr.band,60.1699,24.9384 +wot.soundhsa.com,34.0479,-118.256 +khatru.nostrver.se,51.8933,4.42083 +nostr.hifish.org,47.4043,8.57398 +freelay.sovbit.host,64.1476,-21.9392 +nostr.bilthon.dev,25.8128,-80.2377 +nostr.night7.space,50.4754,12.3683 relay.illuminodes.com,47.6061,-122.333 -relay.nostx.io,43.6532,-79.3832 -relay.puresignal.news,43.6532,-79.3832 +relayone.soundhsa.com,34.0479,-118.256 +nostr.azzamo.net,52.2633,21.0283 fenrir-s.notoshi.win,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -relay.conduit.market,43.6532,-79.3832 -relay.jeffg.fyi,43.6532,-79.3832 -nproxy.kristapsk.lv,60.1699,24.9384 +nostr.spicyz.io,43.6532,-79.3832 +nostrelay.memory-art.xyz,43.6532,-79.3832 +nostr.coincards.com,53.5501,-113.469 +alien.macneilmediagroup.com,43.6532,-79.3832 +nostrings-relay-dev.fly.dev,41.8781,-87.6298 +relay.satlantis.io,32.8769,-80.0114 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.agora.social,50.7383,15.0648 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.0xchat.com,1.35208,103.82 +wot.utxo.one,43.6532,-79.3832 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.zenon.network,43.5009,-70.4428 +wot.codingarena.top,50.4754,12.3683 +nostr-02.dorafactory.org,1.35208,103.82 +relay.nostromo.social,49.4543,11.0746 +theoutpost.life,64.1476,-21.9392 +strfry.shock.network,41.8959,-88.2169 +strfry.openhoofd.nl,51.9229,4.40833 +itanostr.space,52.2931,4.79099 +relay.barine.co,43.6532,-79.3832 +nostr.middling.mydns.jp,35.8099,140.12 relay.olas.app,50.4754,12.3683 -relay.dwadziesciajeden.pl,52.2297,21.0122 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -nostr.pleb.one,38.6327,-90.1961 -relay.digitalezukunft.cyou,45.5019,-73.5674 +nostr.girino.org,43.6532,-79.3832 +nostr-relay.online,43.6532,-79.3832 relay.evanverma.com,40.8302,-74.1299 -wot.dtonon.com,43.6532,-79.3832 -relay.seq1.net,43.6532,-79.3832 -nostr.kalf.org,52.3676,4.90414 -nostr.snowbla.de,60.1699,24.9384 -nostr.spicyz.io,43.6532,-79.3832 -nostr-relay.zimage.com,34.282,-118.439 +relay.angor.io,48.1046,11.6002 +relay.nostrdice.com,-33.8688,151.209 +ribo.us.nostria.app,41.5868,-93.625 +relay01.lnfi.network,39.0997,-94.5786 +nostr.namek.link,43.6532,-79.3832 +relay.aloftus.io,34.0881,-118.379 +ithurtswhenip.ee,51.223,6.78245 +ribo.af.nostria.app,-26.2041,28.0473 +shu05.shugur.net,48.8566,2.35222 +noxir.kpherox.dev,34.8587,135.509 +relay.degmods.com,50.4754,12.3683 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.hasenpfeffr.com,39.0438,-77.4874 +fanfares.nostr1.com,40.7128,-74.006 +relay.nosto.re,51.8933,4.42083 +nostr.liberty.fans,36.9104,-89.5875 +nostr-2.21crypto.ch,47.4988,8.72369 +relay-rpi.edufeed.org,49.4543,11.0746 +offchain.pub,36.1809,-115.241 +nostr.88mph.life,43.6532,-79.3832 +nostr.luisschwab.net,43.6532,-79.3832 +nostr.casa21.space,43.6532,-79.3832 +nostr.hekster.org,37.3986,-121.964 +relay.utxo.farm,35.6916,139.768 +zap.watch,45.5029,-73.5723 +nostr-pub.wellorder.net,45.5201,-122.99 +wot.sovbit.host,64.1466,-21.9426 +relay.endfiat.money,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +nostr.jerrynya.fun,31.2304,121.474 nostr.spacecitynode.com,29.7057,-95.2706 +relay.siamdev.cc,13.9178,100.424 +relay.notoshi.win,13.7829,100.546 +relay.nostx.io,43.6532,-79.3832 +relay.cypherflow.ai,48.8566,2.35222 +relay.letsfo.com,51.098,17.0321 +librerelay.aaroniumii.com,43.6532,-79.3832 +gnostr.com,40.9017,29.1616 +nostr.pleb.one,38.6327,-90.1961 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +nostr.tadryanom.me,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +nostr.stakey.net,52.3676,4.90414 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.damus.io,43.6532,-79.3832 dev-relay.lnfi.network,39.0997,-94.5786 -itanostr.space,52.2931,4.79099 +slick.mjex.me,39.048,-77.4817 +wot.sudocarlos.com,51.5072,-0.127586 +relay04.lnfi.network,39.0997,-94.5786 +relay.13room.space,43.6532,-79.3832 +relay.conduit.market,43.6532,-79.3832 +nostr.chaima.info,51.223,6.78245 From 95358ac34a0d14abacc58c68ae6752e1102af889 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Sep 2025 06:20:40 +0000 Subject: [PATCH 02/24] Automated update of relay data - Sun Sep 28 06:20:40 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 486 +++++++++++++-------------- 1 file changed, 242 insertions(+), 244 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 046ceff22..3b7006d86 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,275 +1,273 @@ Relay URL,Latitude,Longitude -nostr.tac.lol,47.4748,-122.273 -relay.javi.space,43.4633,11.8796 -nostr.einundzwanzig.space,50.1109,8.68213 -nostr.kalf.org,52.3676,4.90414 -wot.dtonon.com,43.6532,-79.3832 -nostr-01.yakihonne.com,1.32123,103.695 -wot.basspistol.org,49.4521,11.0767 -relay.puresignal.news,43.6532,-79.3832 -nostrelites.org,41.8781,-87.6298 -nostr-relay.nextblockvending.com,47.674,-122.122 -relay03.lnfi.network,39.0997,-94.5786 -nproxy.kristapsk.lv,60.1699,24.9384 -relay.toastr.net,40.8054,-74.0241 -relay.davidebtc.me,51.5072,-0.127586 -wot.nostr.net,43.6532,-79.3832 -relay.mattybs.lol,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -nostr.kungfu-g.rip,33.7946,-84.4488 -relay.mccormick.cx,52.3563,4.95714 -relay.dwadziesciajeden.pl,52.2297,21.0122 -nostr.data.haus,50.4754,12.3683 -vitor.nostr1.com,40.7128,-74.006 -purpura.cloud,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -nos.lol,50.4754,12.3683 -nostr.rohoss.com,50.1109,8.68213 -strfry.bonsai.com,37.8715,-122.273 -relay.fountain.fm,39.0997,-94.5786 -relay.npubhaus.com,43.6532,-79.3832 -relay.nostr.wirednet.jp,34.706,135.493 -soloco.nl,43.6532,-79.3832 -shu01.shugur.net,21.4902,39.2246 -nostr.davidebtc.me,51.5072,-0.127586 -pyramid.fiatjaf.com,50.1109,8.68213 -relay.ditto.pub,43.6532,-79.3832 -relay.nostr.vet,52.6467,4.7395 -relay.wavlake.com,41.2619,-95.8608 -ribo.eu.nostria.app,52.3676,4.90414 -relay.ngengine.org,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 -no.str.cr,9.92857,-84.0528 +relay.satlantis.io,32.8769,-80.0114 relay.primal.net,43.6532,-79.3832 -ynostr.yael.at,60.1699,24.9384 -nostr.camalolo.com,24.1469,120.684 +premium.primal.net,43.6532,-79.3832 purplerelay.com,50.1109,8.68213 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.internationalright-wing.org,-22.5022,-48.7114 -wheat.happytavern.co,43.6532,-79.3832 -nostr.lostr.space,43.6532,-79.3832 -relay.tagayasu.xyz,43.6715,-79.38 +nostr.ovia.to,43.6532,-79.3832 +relay.nostr.wirednet.jp,34.706,135.493 +relay.vrtmrz.net,43.6532,-79.3832 +relay.wellorder.net,45.5201,-122.99 +relay.nostriot.com,41.5695,-83.9786 +nostr.snowbla.de,60.1699,24.9384 +fanfares.nostr1.com,40.7057,-74.0136 +relay.ditto.pub,43.6532,-79.3832 relay.varke.eu,52.6921,6.19372 -free.relayted.de,50.1109,8.68213 -nostr.thebiglake.org,32.71,-96.6745 -nostr.lojong.info,43.6532,-79.3832 +ithurtswhenip.ee,51.223,6.78245 +offchain.pub,36.1809,-115.241 +wot.nostr.party,36.1627,-86.7816 +zap.watch,45.5029,-73.5723 +orangepiller.org,60.1699,24.9384 +nostr.camalolo.com,24.1469,120.684 +relay.coinos.io,43.6532,-79.3832 nostr.now,36.55,139.733 -relay.jmoose.rocks,60.1699,24.9384 -relay.holzeis.me,43.6532,-79.3832 -nostr.roundrockbitcoiners.com,40.8054,-74.0241 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay2.ngengine.org,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -4u2ni0zjbjvni.clorecloud.net,43.6532,-79.3832 -shu04.shugur.net,25.2604,55.2989 -relay.fr13nd5.com,52.5233,13.3426 -nostr.vulpem.com,49.4543,11.0746 temp.iris.to,43.6532,-79.3832 -x.kojira.io,43.6532,-79.3832 -adre.su,59.9311,30.3609 -nostr-dev.wellorder.net,45.5201,-122.99 -nostr.mom,50.4754,12.3683 -relay.nostr.place,32.7767,-96.797 +soloco.nl,43.6532,-79.3832 +nostr.blankfors.se,60.1699,24.9384 +relay.nostx.io,43.6532,-79.3832 wot.nostr.place,30.2672,-97.7431 -nostr.carroarmato0.be,50.9928,3.26317 -nostrelay.circum.space,51.2217,6.77616 -relay.chorus.community,50.1109,8.68213 -relay.nostr.net,50.4754,12.3683 -relay.nostr-check.me,43.6532,-79.3832 -relay.nostrhub.fr,48.1046,11.6002 -relay.nostraddress.com,43.6532,-79.3832 -nostr.rblb.it,43.4633,11.8796 -nostr.red5d.dev,43.6532,-79.3832 -santo.iguanatech.net,40.8302,-74.1299 -relay02.lnfi.network,39.0997,-94.5786 -relay.21e6.cz,50.1682,14.0546 -a.nos.lol,50.4754,12.3683 -shu02.shugur.net,21.4902,39.2246 -schnorr.me,43.6532,-79.3832 -nostr.n7ekb.net,47.4941,-122.294 -wot.shaving.kiwi,43.6532,-79.3832 -dev-nostr.bityacht.io,25.0797,121.234 -relay.credenso.cafe,43.1149,-80.7228 -relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.damus.io,43.6532,-79.3832 +nostr.sagaciousd.com,49.2827,-123.121 relay.mess.ch,47.3591,8.55292 -inbox.azzamo.net,52.2633,21.0283 -prl.plus,55.7623,37.6381 -yabu.me,35.6092,139.73 -relayrs.notoshi.win,43.6532,-79.3832 -premium.primal.net,43.6532,-79.3832 -nostr.coincrowd.fund,39.0438,-77.4874 -nostr.2b9t.xyz,34.0549,-118.243 -nostr.thaliyal.com,40.8218,-74.45 -relay.exit.pub,50.4754,12.3683 -nostr.jfischer.org,49.0291,8.35696 -relay.origin.land,35.6673,139.751 -nostr.myshosholoza.co.za,52.3676,4.90414 -relay.nostriot.com,41.5695,-83.9786 -relay.btcforplebs.com,43.6532,-79.3832 +relay.snort.social,43.6532,-79.3832 +strfry.bonsai.com,37.8715,-122.273 +relay.chorus.community,50.1109,8.68213 +black.nostrcity.club,41.8781,-87.6298 +relay.conduit.market,43.6532,-79.3832 +relay01.lnfi.network,39.0997,-94.5786 +relay.nostr.vet,52.6467,4.7395 +relay.etch.social,41.2619,-95.8608 relay.chakany.systems,43.6532,-79.3832 -nostr.openhoofd.nl,51.9229,4.40833 -nostrcheck.me,43.6532,-79.3832 -nostr.plantroon.com,50.1013,8.62643 -satsage.xyz,37.3986,-121.964 -nostr.faultables.net,43.6532,-79.3832 -nostr.calitabby.net,39.9268,-75.0246 -relay.freeplace.nl,52.3676,4.90414 -relay.nostrhub.tech,49.4543,11.0746 -roles-az-achieving-somebody.trycloudflare.com,43.6532,-79.3832 -relay.arx-ccn.com,50.4754,12.3683 -cyberspace.nostr1.com,40.7128,-74.006 -nostr.smut.cloud,43.6532,-79.3832 -nostr-02.czas.top,53.471,9.88208 -relay.tapestry.ninja,40.8054,-74.0241 -relay.mostro.network,40.8302,-74.1299 -wot.brightbolt.net,47.6735,-116.781 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.rikmeijer.nl,50.4754,12.3683 -relay.artx.market,43.652,-79.3633 -strfry.felixzieger.de,50.1013,8.62643 -relay.seq1.net,43.6532,-79.3832 -relay.cosmicbolt.net,37.3986,-121.964 -relay.electriclifestyle.com,26.2897,-80.1293 -r.bitcoinhold.net,43.6532,-79.3832 -nostr-relay.amethyst.name,39.0067,-77.4291 -relay.stream.labs.h3.se,59.4016,17.9455 -relay.unknown.cloud,43.6532,-79.3832 -nostr-02.yakihonne.com,1.32123,103.695 -relay.coinos.io,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 +relay-rpi.edufeed.org,49.4543,11.0746 +relay.bullishbounty.com,43.6532,-79.3832 nostream.breadslice.com,43.6532,-79.3832 +wot.basspistol.org,49.4521,11.0767 +nostr.fbxl.net,48.3809,-89.2477 +inbox.azzamo.net,52.2633,21.0283 +nostr.88mph.life,43.6532,-79.3832 +wot.dergigi.com,64.1476,-21.9392 +relay.nosto.re,51.8933,4.42083 +nostr.n7ekb.net,47.4941,-122.294 +relay.nostr.net,50.4754,12.3683 +relay.tagayasu.xyz,43.6715,-79.38 relay.fundstr.me,42.3601,-71.0589 -nostr.oxtr.dev,50.4754,12.3683 -nos.xmark.cc,50.6924,3.20113 -nostr.mikoshi.de,50.1109,8.68213 -relay.magiccity.live,25.8128,-80.2377 +shu05.shugur.net,48.8566,2.35222 +nostrelay.memory-art.xyz,43.6532,-79.3832 +shu04.shugur.net,25.2604,55.2989 nostr-verified.wellorder.net,45.5201,-122.99 -nostr.makibisskey.work,43.6532,-79.3832 -wot.nostr.party,36.1627,-86.7816 +relay.usefusion.ai,39.0438,-77.4874 +relay.fountain.fm,39.0997,-94.5786 +nostr-dev.wellorder.net,45.5201,-122.99 +nostr-relay.nextblockvending.com,47.674,-122.122 +nostr.zenon.network,43.5009,-70.4428 +nostr.oxtr.dev,50.4754,12.3683 +relay2.ngengine.org,43.6532,-79.3832 +nr.yay.so,46.2126,6.1154 +strfry.shock.network,41.8959,-88.2169 +relay.stream.labs.h3.se,59.4016,17.9455 +relay.orangepill.ovh,49.1689,-0.358841 +nostr.pleb.one,38.6327,-90.1961 +nostr.jfischer.org,49.0291,8.35696 +relay.nostr.band,60.1699,24.9384 +relayone.soundhsa.com,34.0479,-118.256 +nostr.21crypto.ch,47.4988,8.72369 relay.copylaradio.com,51.223,6.78245 -nostr.sathoarder.com,48.5734,7.75211 -relay.jeffg.fyi,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 -nostr.ovia.to,43.6532,-79.3832 -black.nostrcity.club,41.8781,-87.6298 -relay.nostrcheck.me,43.6532,-79.3832 -nostr-relay.cbrx.io,43.6532,-79.3832 +relay.puresignal.news,43.6532,-79.3832 +strfry.openhoofd.nl,51.9229,4.40833 nostr-03.dorafactory.org,1.35208,103.82 -nostr-relay.zimage.com,34.282,-118.439 -relay.sigit.io,50.4754,12.3683 -relay.laantungir.net,-19.4692,-42.5315 -relay-admin.thaliyal.com,40.8218,-74.45 -relay.mwaters.net,50.9871,2.12554 -relay.lumina.rocks,49.0291,8.35695 -nostr.satstralia.com,64.1476,-21.9392 -nostr.sagaciousd.com,49.2827,-123.121 -relay.bullishbounty.com,43.6532,-79.3832 -wot.dergigi.com,64.1476,-21.9392 -relay.vrtmrz.net,43.6532,-79.3832 -nostr.0x7e.xyz,47.4988,8.72369 -articles.layer3.news,37.3387,-121.885 -relay.digitalezukunft.cyou,45.5019,-73.5674 -nostr.notribe.net,40.8302,-74.1299 -nostr.21crypto.ch,47.4988,8.72369 -relay.lifpay.me,1.35208,103.82 -relay.g1sms.fr,43.9432,2.07537 -relay.snort.social,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -relay.moinsen.com,50.4754,12.3683 -nostr.blankfors.se,60.1699,24.9384 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -orangesync.tech,50.1109,8.68213 -relay.ru.ac.th,13.7584,100.622 -orangepiller.org,60.1699,24.9384 -relay.nostr.band,60.1699,24.9384 -wot.soundhsa.com,34.0479,-118.256 -khatru.nostrver.se,51.8933,4.42083 -nostr.hifish.org,47.4043,8.57398 -freelay.sovbit.host,64.1476,-21.9392 -nostr.bilthon.dev,25.8128,-80.2377 -nostr.night7.space,50.4754,12.3683 +ribo.us.nostria.app,41.5868,-93.625 relay.illuminodes.com,47.6061,-122.333 -relayone.soundhsa.com,34.0479,-118.256 -nostr.azzamo.net,52.2633,21.0283 -fenrir-s.notoshi.win,43.6532,-79.3832 -nostr.spicyz.io,43.6532,-79.3832 -nostrelay.memory-art.xyz,43.6532,-79.3832 +nostr.girino.org,43.6532,-79.3832 +yabu.me,35.6092,139.73 +relay.lightning.pub,41.8959,-88.2169 +noxir.kpherox.dev,34.8587,135.509 nostr.coincards.com,53.5501,-113.469 -alien.macneilmediagroup.com,43.6532,-79.3832 -nostrings-relay-dev.fly.dev,41.8781,-87.6298 -relay.satlantis.io,32.8769,-80.0114 -srtrelay.c-stellar.net,43.6532,-79.3832 +wot.nostr.net,43.6532,-79.3832 +nostrcheck.me,43.6532,-79.3832 +nostr.thebiglake.org,32.71,-96.6745 +nostr.rblb.it,43.4633,11.8796 +articles.layer3.news,37.3387,-121.885 +cyberspace.nostr1.com,40.7128,-74.006 +relay.21e6.cz,50.1682,14.0546 relay.agora.social,50.7383,15.0648 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.0xchat.com,1.35208,103.82 -wot.utxo.one,43.6532,-79.3832 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr.zenon.network,43.5009,-70.4428 -wot.codingarena.top,50.4754,12.3683 -nostr-02.dorafactory.org,1.35208,103.82 -relay.nostromo.social,49.4543,11.0746 -theoutpost.life,64.1476,-21.9392 -strfry.shock.network,41.8959,-88.2169 -strfry.openhoofd.nl,51.9229,4.40833 -itanostr.space,52.2931,4.79099 -relay.barine.co,43.6532,-79.3832 nostr.middling.mydns.jp,35.8099,140.12 -relay.olas.app,50.4754,12.3683 -nostr.girino.org,43.6532,-79.3832 -nostr-relay.online,43.6532,-79.3832 -relay.evanverma.com,40.8302,-74.1299 -relay.angor.io,48.1046,11.6002 -relay.nostrdice.com,-33.8688,151.209 -ribo.us.nostria.app,41.5868,-93.625 -relay01.lnfi.network,39.0997,-94.5786 -nostr.namek.link,43.6532,-79.3832 relay.aloftus.io,34.0881,-118.379 -ithurtswhenip.ee,51.223,6.78245 -ribo.af.nostria.app,-26.2041,28.0473 -shu05.shugur.net,48.8566,2.35222 -noxir.kpherox.dev,34.8587,135.509 -relay.degmods.com,50.4754,12.3683 +shu01.shugur.net,21.4902,39.2246 +relay.zone667.com,60.1699,24.9384 +wot.sudocarlos.com,51.5072,-0.127586 +relay.nostrhub.tech,49.4543,11.0746 +relay-admin.thaliyal.com,40.8218,-74.45 +relay.toastr.net,40.8054,-74.0241 +relay.olas.app,50.4754,12.3683 +schnorr.me,43.6532,-79.3832 +nostr.einundzwanzig.space,50.1109,8.68213 relay.goodmorningbitcoin.com,43.6532,-79.3832 -nostr.4rs.nl,49.0291,8.35696 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.hasenpfeffr.com,39.0438,-77.4874 -fanfares.nostr1.com,40.7128,-74.006 -relay.nosto.re,51.8933,4.42083 -nostr.liberty.fans,36.9104,-89.5875 +relay.holzeis.me,43.6532,-79.3832 +no.str.cr,9.92857,-84.0528 +nostr.thaliyal.com,40.8218,-74.45 +nostr.faultables.net,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 nostr-2.21crypto.ch,47.4988,8.72369 -relay-rpi.edufeed.org,49.4543,11.0746 -offchain.pub,36.1809,-115.241 -nostr.88mph.life,43.6532,-79.3832 +wot.sovbit.host,64.1466,-21.9426 +relay.nostrcheck.me,43.6532,-79.3832 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +nostr.myshosholoza.co.za,52.3676,4.90414 +nostr-relay.zimage.com,34.282,-118.439 +nostr.carroarmato0.be,50.9928,3.26317 +relay.endfiat.money,43.6532,-79.3832 +relay.mostro.network,40.8302,-74.1299 +relay.lumina.rocks,49.0291,8.35695 +nostr.mikoshi.de,50.1109,8.68213 nostr.luisschwab.net,43.6532,-79.3832 -nostr.casa21.space,43.6532,-79.3832 +nostr-02.yakihonne.com,1.32123,103.695 +dizzyspells.nostr1.com,40.7128,-74.006 +relay.bitcoinveneto.org,64.1466,-21.9426 +nostr.liberty.fans,36.9104,-89.5875 +relay.freeplace.nl,52.3676,4.90414 +nostr.kungfu-g.rip,33.7946,-84.4488 +x.kojira.io,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 +pyramid.fiatjaf.com,50.1109,8.68213 nostr.hekster.org,37.3986,-121.964 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.fr13nd5.com,52.5233,13.3426 +relay.ngengine.org,43.6532,-79.3832 +relay03.lnfi.network,39.0997,-94.5786 +khatru.nostrver.se,51.8933,4.42083 +wheat.happytavern.co,43.6532,-79.3832 +nproxy.kristapsk.lv,60.1699,24.9384 relay.utxo.farm,35.6916,139.768 -zap.watch,45.5029,-73.5723 -nostr-pub.wellorder.net,45.5201,-122.99 -wot.sovbit.host,64.1466,-21.9426 -relay.endfiat.money,43.6532,-79.3832 -nostr2.girino.org,43.6532,-79.3832 -nostr.jerrynya.fun,31.2304,121.474 -nostr.spacecitynode.com,29.7057,-95.2706 relay.siamdev.cc,13.9178,100.424 +nostr.0x7e.xyz,47.4988,8.72369 +nostr.jerrynya.fun,31.2304,121.474 +librerelay.aaroniumii.com,43.6532,-79.3832 +relay.javi.space,43.4633,11.8796 +nostr.night7.space,50.4754,12.3683 +relay-dev.satlantis.io,40.8302,-74.1299 +relay.nostromo.social,49.4543,11.0746 +relay.nostraddress.com,43.6532,-79.3832 +strfry.felixzieger.de,50.1013,8.62643 +relay.mccormick.cx,52.3563,4.95714 +r.lostr.net,52.3676,4.90414 +relay.electriclifestyle.com,26.2897,-80.1293 +nostr.satstralia.com,64.1476,-21.9392 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +purpura.cloud,43.6532,-79.3832 +relay.dwadziesciajeden.pl,52.2297,21.0122 +relay.tapestry.ninja,40.8054,-74.0241 +adre.su,59.9311,30.3609 +nostr.chaima.info,51.223,6.78245 +a.nos.lol,50.4754,12.3683 +relay.laantungir.net,-19.4692,-42.5315 +nostr-02.dorafactory.org,1.35208,103.82 +nos.xmark.cc,50.6924,3.20113 +nostr.spicyz.io,43.6532,-79.3832 +relay.wavlake.com,41.2619,-95.8608 +relay.nostrhub.fr,48.1046,11.6002 +ribo.eu.nostria.app,52.3676,4.90414 +relay.btcforplebs.com,43.6532,-79.3832 +nostr.tac.lol,47.4748,-122.273 +nostr.makibisskey.work,43.6532,-79.3832 +nostr-relay.amethyst.name,39.0067,-77.4291 +relay.libernet.app,43.6532,-79.3832 +relay.digitalezukunft.cyou,45.5019,-73.5674 +nostr.casa21.space,43.6532,-79.3832 +relayone.geektank.ai,18.2148,-63.0574 +ynostr.yael.at,60.1699,24.9384 +shu02.shugur.net,21.4902,39.2246 +vitor.nostr1.com,40.7057,-74.0136 +wot.codingarena.top,50.4754,12.3683 +relay.g1sms.fr,43.9432,2.07537 +r.bitcoinhold.net,43.6532,-79.3832 +wot.utxo.one,43.6532,-79.3832 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +relay.seq1.net,43.6532,-79.3832 +relay.credenso.cafe,43.1149,-80.7228 +relay.nostr.place,32.7767,-96.797 +nostr.plantroon.com,50.1013,8.62643 +relay.0xchat.com,1.35208,103.82 +wot.dtonon.com,43.6532,-79.3832 +nostrelay.circum.space,51.2217,6.77616 +santo.iguanatech.net,40.8302,-74.1299 +nostr.kalf.org,52.3676,4.90414 +relay.artx.market,43.652,-79.3633 +relay.jeffg.fyi,43.6532,-79.3832 +theoutpost.life,64.1476,-21.9392 +orangesync.tech,50.1109,8.68213 +wot.sebastix.social,51.8933,4.42083 relay.notoshi.win,13.7829,100.546 -relay.nostx.io,43.6532,-79.3832 -relay.cypherflow.ai,48.8566,2.35222 +dev-relay.lnfi.network,39.0997,-94.5786 +nos.lol,50.4754,12.3683 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.magiccity.live,25.8128,-80.2377 +relay.npubhaus.com,43.6532,-79.3832 +nostr.vulpem.com,49.4543,11.0746 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.origin.land,35.6673,139.751 +nostr.bilthon.dev,25.8128,-80.2377 relay.letsfo.com,51.098,17.0321 -librerelay.aaroniumii.com,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +relay02.lnfi.network,39.0997,-94.5786 +free.relayted.de,50.1109,8.68213 +nostr.spaceshell.xyz,43.6532,-79.3832 +relay04.lnfi.network,39.0997,-94.5786 +relay.wolfcoil.com,35.6092,139.73 +relay.mwaters.net,50.9871,2.12554 +relayrs.notoshi.win,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 +relay.hasenpfeffr.com,39.0438,-77.4874 gnostr.com,40.9017,29.1616 -nostr.pleb.one,38.6327,-90.1961 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -nostr.tadryanom.me,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -nostr.stakey.net,52.3676,4.90414 +relay.basspistol.org,46.2044,6.14316 +relay.internationalright-wing.org,-22.5022,-48.7114 +prl.plus,55.7623,37.6381 +relay.getsafebox.app,43.6532,-79.3832 +nostr.smut.cloud,43.6532,-79.3832 +relay.barine.co,43.6532,-79.3832 +alien.macneilmediagroup.com,43.6532,-79.3832 +nostr.davidebtc.me,51.5072,-0.127586 +fenrir-s.notoshi.win,43.6532,-79.3832 +satsage.xyz,37.3986,-121.964 +nostr-relay.online,43.6532,-79.3832 +nostr.lostr.space,43.6532,-79.3832 +nostr.red5d.dev,43.6532,-79.3832 +relay.guggero.org,47.3769,8.54169 nostr.rtvslawenia.com,49.4543,11.0746 -relay.damus.io,43.6532,-79.3832 -dev-relay.lnfi.network,39.0997,-94.5786 +ribo.af.nostria.app,-26.2041,28.0473 +relay.nostrdice.com,-33.8688,151.209 +relay.arx-ccn.com,50.4754,12.3683 +srtrelay.c-stellar.net,43.6532,-79.3832 +wot.soundhsa.com,34.0479,-118.256 +nostr.sathoarder.com,48.5734,7.75211 +wot.brightbolt.net,47.6735,-116.781 +nostr.data.haus,50.4754,12.3683 +relay.jmoose.rocks,60.1699,24.9384 slick.mjex.me,39.048,-77.4817 -wot.sudocarlos.com,51.5072,-0.127586 -relay04.lnfi.network,39.0997,-94.5786 +nostr.2b9t.xyz,34.0549,-118.243 +relay.cypherflow.ai,48.8566,2.35222 +nostr.overmind.lol,43.6532,-79.3832 +relay.mattybs.lol,43.6532,-79.3832 +nostr.lojong.info,43.6532,-79.3832 +relay.davidebtc.me,51.5072,-0.127586 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +nostr.stakey.net,52.3676,4.90414 relay.13room.space,43.6532,-79.3832 -relay.conduit.market,43.6532,-79.3832 -nostr.chaima.info,51.223,6.78245 +strfry.elswa-dev.online,48.8566,2.35222 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.tadryanom.me,43.6532,-79.3832 +nostr-pub.wellorder.net,45.5201,-122.99 +nostr.hifish.org,47.4043,8.57398 +4u2ni0zjbjvni.clorecloud.net,43.6532,-79.3832 +nostr.mom,50.4754,12.3683 +dev-nostr.bityacht.io,25.0797,121.234 +relay.evanverma.com,40.8302,-74.1299 +nostr.rikmeijer.nl,50.4754,12.3683 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +nostr.azzamo.net,52.2633,21.0283 +nostr-01.yakihonne.com,1.32123,103.695 +relay.moinsen.com,50.4754,12.3683 +nostr.notribe.net,40.8302,-74.1299 +nostr.coincrowd.fund,39.0438,-77.4874 +relay.degmods.com,50.4754,12.3683 +relay.angor.io,48.1046,11.6002 +relay.sigit.io,50.4754,12.3683 +relay2.angor.io,48.1046,11.6002 +relay.cosmicbolt.net,37.3986,-121.964 From 696f698046724b467da465fd49945e69779aec8c Mon Sep 17 00:00:00 2001 From: yet300 Date: Tue, 30 Sep 2025 12:52:56 +0400 Subject: [PATCH 03/24] refactor: new close button like ios(but not liquid glass) --- .../java/com/bitchat/android/ui/AboutSheet.kt | 36 +++++++++++++------ .../android/ui/LocationChannelsSheet.kt | 14 +++----- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt index bce3ef1c2..08fde4279 100644 --- a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Bluetooth +import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Public import androidx.compose.material.icons.filled.Security @@ -550,24 +551,39 @@ fun AboutSheet( .height(64.dp) .background(MaterialTheme.colorScheme.background.copy(alpha = topBarAlpha)) ) { - TextButton( + CloseButton( onClick = onDismiss, - modifier = Modifier + modifier = modifier .align(Alignment.CenterEnd) - .padding(horizontal = 16.dp) - ) { - Text( - text = "Close", - style = MaterialTheme.typography.labelMedium.copy(fontWeight = FontWeight.Bold), - color = MaterialTheme.colorScheme.onBackground - ) - } + .padding(horizontal = 16.dp), + ) } } } } } +@Composable +fun CloseButton( + onClick: () -> Unit, + modifier: Modifier = Modifier +) { + IconButton( + onClick = onClick, + modifier = modifier + .size(32.dp), + colors = IconButtonDefaults.iconButtonColors( + contentColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f), + containerColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.1f) + ) + ) { + Icon( + imageVector = Icons.Default.Close, + contentDescription = "Close", + modifier = Modifier.size(18.dp) + ) + } +} /** * Password prompt dialog for password-protected channels * Kept as dialog since it requires user input diff --git a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt index fd8ad1eb7..693ae3f11 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt @@ -551,18 +551,12 @@ fun LocationChannelsSheet( .height(56.dp) .background(MaterialTheme.colorScheme.background.copy(alpha = topBarAlpha)) ) { - TextButton( + CloseButton( onClick = onDismiss, - modifier = Modifier + modifier = modifier .align(Alignment.CenterEnd) - .padding(horizontal = 16.dp) - ) { - Text( - text = "Close", - style = MaterialTheme.typography.labelMedium.copy(fontWeight = FontWeight.Bold), - color = MaterialTheme.colorScheme.onBackground - ) - } + .padding(horizontal = 16.dp), + ) } } } From 776d6c5cd7a766fe8eb4ed2ea242052044c04cc6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 5 Oct 2025 06:20:09 +0000 Subject: [PATCH 04/24] Automated update of relay data - Sun Oct 5 06:20:09 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 492 +++++++++++++-------------- 1 file changed, 244 insertions(+), 248 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 3b7006d86..eb5e8c277 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,273 +1,269 @@ Relay URL,Latitude,Longitude -relay.satlantis.io,32.8769,-80.0114 -relay.primal.net,43.6532,-79.3832 -premium.primal.net,43.6532,-79.3832 -purplerelay.com,50.1109,8.68213 -nostr.ovia.to,43.6532,-79.3832 -relay.nostr.wirednet.jp,34.706,135.493 -relay.vrtmrz.net,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 -relay.nostriot.com,41.5695,-83.9786 -nostr.snowbla.de,60.1699,24.9384 -fanfares.nostr1.com,40.7057,-74.0136 -relay.ditto.pub,43.6532,-79.3832 -relay.varke.eu,52.6921,6.19372 -ithurtswhenip.ee,51.223,6.78245 -offchain.pub,36.1809,-115.241 -wot.nostr.party,36.1627,-86.7816 -zap.watch,45.5029,-73.5723 +relay-admin.thaliyal.com,40.8218,-74.45 +nostr.notribe.net,40.8302,-74.1299 +strfry.bonsai.com,37.8715,-122.273 +nostr-relay.online,40.7357,-74.1724 +shu05.shugur.net,48.8566,2.35222 +dev-nostr.bityacht.io,25.0797,121.234 +relay.nostrhub.tech,49.0291,8.35696 +relay.davidebtc.me,50.1109,8.68213 +relay.moinsen.com,50.4754,12.3683 +relay.olas.app,50.4754,12.3683 +mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 orangepiller.org,60.1699,24.9384 -nostr.camalolo.com,24.1469,120.684 -relay.coinos.io,43.6532,-79.3832 -nostr.now,36.55,139.733 -temp.iris.to,43.6532,-79.3832 -soloco.nl,43.6532,-79.3832 +relayrs.notoshi.win,43.6532,-79.3832 +relay.guggero.org,47.3769,8.54169 nostr.blankfors.se,60.1699,24.9384 -relay.nostx.io,43.6532,-79.3832 -wot.nostr.place,30.2672,-97.7431 -relay.damus.io,43.6532,-79.3832 -nostr.sagaciousd.com,49.2827,-123.121 -relay.mess.ch,47.3591,8.55292 +wot.sovbit.host,64.1466,-21.9426 +nostr.huszonegy.world,47.4979,19.0402 +wot.sebastix.social,51.8933,4.42083 +articles.layer3.news,37.3387,-121.885 +nostr.spicyz.io,40.7357,-74.1724 +nostr.jerrynya.fun,31.2304,121.474 +nostr.oxtr.dev,50.4754,12.3683 +relay.mwaters.net,50.9871,2.12554 +vitor.nostr1.com,40.7128,-74.006 +relay.lumina.rocks,49.0291,8.35695 +nostr-relay-1.trustlessenterprise.com,40.7357,-74.1724 +nostr.bilthon.dev,25.8128,-80.2377 +nostr.now,36.55,139.733 +nostr.girino.org,40.7357,-74.1724 +nostr-01.yakihonne.com,1.32123,103.695 +ribo.af.nostria.app,-26.2041,28.0473 +nostrelay.memory-art.xyz,43.6532,-79.3832 +relay.evanverma.com,40.8302,-74.1299 +a.nos.lol,50.4754,12.3683 +purpura.cloud,40.7357,-74.1724 relay.snort.social,43.6532,-79.3832 -strfry.bonsai.com,37.8715,-122.273 -relay.chorus.community,50.1109,8.68213 -black.nostrcity.club,41.8781,-87.6298 -relay.conduit.market,43.6532,-79.3832 -relay01.lnfi.network,39.0997,-94.5786 -relay.nostr.vet,52.6467,4.7395 -relay.etch.social,41.2619,-95.8608 -relay.chakany.systems,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4543,11.0746 -relay.bullishbounty.com,43.6532,-79.3832 -nostream.breadslice.com,43.6532,-79.3832 +relay.holzeis.me,43.6532,-79.3832 +nostr.spaceshell.xyz,40.7128,-74.006 +nostr.liberty.fans,36.9104,-89.5875 +relay.fundstr.me,42.3601,-71.0589 wot.basspistol.org,49.4521,11.0767 -nostr.fbxl.net,48.3809,-89.2477 -inbox.azzamo.net,52.2633,21.0283 -nostr.88mph.life,43.6532,-79.3832 +ribo.eu.nostria.app,52.3676,4.90414 +relay.notoshi.win,13.4166,101.335 +relay.stream.labs.h3.se,59.4016,17.9455 +nostr.stakey.net,52.3676,4.90414 +relay.satlantis.io,32.8769,-80.0114 +nostr-2.21crypto.ch,47.4988,8.72369 +nostr.satstralia.com,64.1476,-21.9392 +slick.mjex.me,39.048,-77.4817 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay.origin.land,35.6673,139.751 +nostr.fbxl.net,48.382,-89.2502 +relay.nostr.place,32.7767,-96.797 +nr.yay.so,46.2126,6.1154 +nostream.breadslice.com,40.7357,-74.1724 +wot.tealeaf.dev,33.7488,-84.3877 +relay.primal.net,43.6532,-79.3832 +relay.chorus.community,50.1109,8.68213 wot.dergigi.com,64.1476,-21.9392 -relay.nosto.re,51.8933,4.42083 -nostr.n7ekb.net,47.4941,-122.294 -relay.nostr.net,50.4754,12.3683 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +relay.mess.ch,46.948,7.44745 +relay.sigit.io,50.4754,12.3683 +relay-rpi.edufeed.org,49.4543,11.0746 +nostr.faultables.net,43.6532,-79.3832 +relay.getsafebox.app,43.6532,-79.3832 +cyberspace.nostr1.com,40.7128,-74.006 +relay.endfiat.money,43.6532,-79.3832 +soloco.nl,43.6532,-79.3832 +nostr.kungfu-g.rip,33.7946,-84.4488 +nostrelay.circum.space,51.2217,6.77616 +relay.trustroots.org,43.6532,-79.3832 +relay.wellorder.net,45.5201,-122.99 +relay.coinos.io,40.7357,-74.1724 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.nostriot.com,41.5695,-83.9786 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.einundzwanzig.space,50.1109,8.68213 +nostr.casa21.space,43.6532,-79.3832 +premium.primal.net,40.7357,-74.1724 relay.tagayasu.xyz,43.6715,-79.38 -relay.fundstr.me,42.3601,-71.0589 -shu05.shugur.net,48.8566,2.35222 -nostrelay.memory-art.xyz,43.6532,-79.3832 -shu04.shugur.net,25.2604,55.2989 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.usefusion.ai,39.0438,-77.4874 -relay.fountain.fm,39.0997,-94.5786 -nostr-dev.wellorder.net,45.5201,-122.99 -nostr-relay.nextblockvending.com,47.674,-122.122 +nostr.mom,50.4754,12.3683 nostr.zenon.network,43.5009,-70.4428 -nostr.oxtr.dev,50.4754,12.3683 -relay2.ngengine.org,43.6532,-79.3832 -nr.yay.so,46.2126,6.1154 -strfry.shock.network,41.8959,-88.2169 -relay.stream.labs.h3.se,59.4016,17.9455 -relay.orangepill.ovh,49.1689,-0.358841 -nostr.pleb.one,38.6327,-90.1961 -nostr.jfischer.org,49.0291,8.35696 -relay.nostr.band,60.1699,24.9384 -relayone.soundhsa.com,34.0479,-118.256 -nostr.21crypto.ch,47.4988,8.72369 -relay.copylaradio.com,51.223,6.78245 -relay.puresignal.news,43.6532,-79.3832 -strfry.openhoofd.nl,51.9229,4.40833 -nostr-03.dorafactory.org,1.35208,103.82 -ribo.us.nostria.app,41.5868,-93.625 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.g1sms.fr,43.9432,2.07537 +nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 relay.illuminodes.com,47.6061,-122.333 -nostr.girino.org,43.6532,-79.3832 -yabu.me,35.6092,139.73 -relay.lightning.pub,41.8959,-88.2169 -noxir.kpherox.dev,34.8587,135.509 -nostr.coincards.com,53.5501,-113.469 -wot.nostr.net,43.6532,-79.3832 -nostrcheck.me,43.6532,-79.3832 -nostr.thebiglake.org,32.71,-96.6745 -nostr.rblb.it,43.4633,11.8796 -articles.layer3.news,37.3387,-121.885 -cyberspace.nostr1.com,40.7128,-74.006 -relay.21e6.cz,50.1682,14.0546 -relay.agora.social,50.7383,15.0648 -nostr.middling.mydns.jp,35.8099,140.12 -relay.aloftus.io,34.0881,-118.379 -shu01.shugur.net,21.4902,39.2246 -relay.zone667.com,60.1699,24.9384 -wot.sudocarlos.com,51.5072,-0.127586 -relay.nostrhub.tech,49.4543,11.0746 -relay-admin.thaliyal.com,40.8218,-74.45 -relay.toastr.net,40.8054,-74.0241 -relay.olas.app,50.4754,12.3683 -schnorr.me,43.6532,-79.3832 -nostr.einundzwanzig.space,50.1109,8.68213 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -relay.holzeis.me,43.6532,-79.3832 -no.str.cr,9.92857,-84.0528 -nostr.thaliyal.com,40.8218,-74.45 -nostr.faultables.net,43.6532,-79.3832 -nostrelites.org,41.8781,-87.6298 -nostr-2.21crypto.ch,47.4988,8.72369 -wot.sovbit.host,64.1466,-21.9426 -relay.nostrcheck.me,43.6532,-79.3832 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -nostr.myshosholoza.co.za,52.3676,4.90414 -nostr-relay.zimage.com,34.282,-118.439 -nostr.carroarmato0.be,50.9928,3.26317 -relay.endfiat.money,43.6532,-79.3832 +dizzyspells.nostr1.com,40.7057,-74.0136 relay.mostro.network,40.8302,-74.1299 -relay.lumina.rocks,49.0291,8.35695 -nostr.mikoshi.de,50.1109,8.68213 -nostr.luisschwab.net,43.6532,-79.3832 -nostr-02.yakihonne.com,1.32123,103.695 -dizzyspells.nostr1.com,40.7128,-74.006 -relay.bitcoinveneto.org,64.1466,-21.9426 -nostr.liberty.fans,36.9104,-89.5875 -relay.freeplace.nl,52.3676,4.90414 -nostr.kungfu-g.rip,33.7946,-84.4488 -x.kojira.io,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -pyramid.fiatjaf.com,50.1109,8.68213 -nostr.hekster.org,37.3986,-121.964 +relay.nostr.wirednet.jp,34.706,135.493 +relay.barine.co,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 +relay.0xchat.com,1.35208,103.82 +relay.mattybs.lol,40.7357,-74.1724 +no.str.cr,9.92857,-84.0528 +relay.utxo.farm,35.6916,139.768 +nostr.pleb.one,38.6327,-90.1961 +relay-dev.satlantis.io,40.8302,-74.1299 +relay.nostrdice.com,-33.8688,151.209 +relay.nostraddress.com,40.7357,-74.1724 +satsage.xyz,37.3986,-121.964 +offchain.pub,36.1809,-115.241 +noxir.kpherox.dev,34.8587,135.509 nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.fr13nd5.com,52.5233,13.3426 -relay.ngengine.org,43.6532,-79.3832 -relay03.lnfi.network,39.0997,-94.5786 khatru.nostrver.se,51.8933,4.42083 -wheat.happytavern.co,43.6532,-79.3832 -nproxy.kristapsk.lv,60.1699,24.9384 -relay.utxo.farm,35.6916,139.768 -relay.siamdev.cc,13.9178,100.424 -nostr.0x7e.xyz,47.4988,8.72369 -nostr.jerrynya.fun,31.2304,121.474 -librerelay.aaroniumii.com,43.6532,-79.3832 -relay.javi.space,43.4633,11.8796 +purplerelay.com,50.1109,8.68213 +relay.tapestry.ninja,40.8054,-74.0241 nostr.night7.space,50.4754,12.3683 -relay-dev.satlantis.io,40.8302,-74.1299 -relay.nostromo.social,49.4543,11.0746 -relay.nostraddress.com,43.6532,-79.3832 -strfry.felixzieger.de,50.1013,8.62643 -relay.mccormick.cx,52.3563,4.95714 -r.lostr.net,52.3676,4.90414 -relay.electriclifestyle.com,26.2897,-80.1293 -nostr.satstralia.com,64.1476,-21.9392 +nostr.rikmeijer.nl,50.4754,12.3683 +relay1.nostrchat.io,60.1699,24.9384 +nostr.21crypto.ch,47.4988,8.72369 +wot.soundhsa.com,33.1384,-95.6011 +relay.orangepill.ovh,49.1689,-0.358841 +talon.quest,43.6532,-79.3832 nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -purpura.cloud,43.6532,-79.3832 +wot.codingarena.top,50.4754,12.3683 +fanfares.nostr1.com,40.7128,-74.006 +gnostr.com,42.6978,23.3246 +nostrcheck.tnsor.network,40.7357,-74.1724 +nostrelites.org,41.8781,-87.6298 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.fr13nd5.com,52.5233,13.3426 +wot.nostr.place,30.2672,-97.7431 +ithurtswhenip.ee,51.223,6.78245 relay.dwadziesciajeden.pl,52.2297,21.0122 -relay.tapestry.ninja,40.8054,-74.0241 -adre.su,59.9311,30.3609 -nostr.chaima.info,51.223,6.78245 -a.nos.lol,50.4754,12.3683 -relay.laantungir.net,-19.4692,-42.5315 -nostr-02.dorafactory.org,1.35208,103.82 +relay2.ngengine.org,40.7357,-74.1724 +relay.nostr.net,50.4754,12.3683 +nostr-relay.cbrx.io,40.7357,-74.1724 +dev-relay.lnfi.network,39.0997,-94.5786 +relay.jeffg.fyi,43.6532,-79.3832 +relay.ngengine.org,40.7357,-74.1724 nos.xmark.cc,50.6924,3.20113 -nostr.spicyz.io,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 -relay.nostrhub.fr,48.1046,11.6002 -ribo.eu.nostria.app,52.3676,4.90414 -relay.btcforplebs.com,43.6532,-79.3832 -nostr.tac.lol,47.4748,-122.273 -nostr.makibisskey.work,43.6532,-79.3832 -nostr-relay.amethyst.name,39.0067,-77.4291 -relay.libernet.app,43.6532,-79.3832 +relay.21e6.cz,50.1682,14.0546 +relay.degmods.com,50.4754,12.3683 +nostr.coincrowd.fund,39.0438,-77.4874 +nostr.myshosholoza.co.za,52.3676,4.90414 relay.digitalezukunft.cyou,45.5019,-73.5674 -nostr.casa21.space,43.6532,-79.3832 -relayone.geektank.ai,18.2148,-63.0574 -ynostr.yael.at,60.1699,24.9384 -shu02.shugur.net,21.4902,39.2246 -vitor.nostr1.com,40.7057,-74.0136 -wot.codingarena.top,50.4754,12.3683 -relay.g1sms.fr,43.9432,2.07537 +r.lostr.net,52.3676,4.90414 +relay.etch.social,41.2619,-95.8608 +nostr.tac.lol,47.4748,-122.273 +nostr.azzamo.net,52.2633,21.0283 +nostr.4rs.nl,49.0291,8.35696 +nostr-03.dorafactory.org,1.35208,103.82 +relay.copylaradio.com,51.223,6.78245 +nostr.camalolo.com,24.1469,120.684 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.nostx.io,43.6532,-79.3832 r.bitcoinhold.net,43.6532,-79.3832 -wot.utxo.one,43.6532,-79.3832 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -relay.seq1.net,43.6532,-79.3832 -relay.credenso.cafe,43.1149,-80.7228 -relay.nostr.place,32.7767,-96.797 -nostr.plantroon.com,50.1013,8.62643 -relay.0xchat.com,1.35208,103.82 -wot.dtonon.com,43.6532,-79.3832 -nostrelay.circum.space,51.2217,6.77616 -santo.iguanatech.net,40.8302,-74.1299 -nostr.kalf.org,52.3676,4.90414 -relay.artx.market,43.652,-79.3633 -relay.jeffg.fyi,43.6532,-79.3832 -theoutpost.life,64.1476,-21.9392 -orangesync.tech,50.1109,8.68213 -wot.sebastix.social,51.8933,4.42083 -relay.notoshi.win,13.7829,100.546 -dev-relay.lnfi.network,39.0997,-94.5786 +nproxy.kristapsk.lv,60.1699,24.9384 +adre.su,59.9311,30.3609 +relay.hasenpfeffr.com,39.0438,-77.4874 nos.lol,50.4754,12.3683 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.magiccity.live,25.8128,-80.2377 -relay.npubhaus.com,43.6532,-79.3832 +relay.nostr.band,60.1699,24.9384 +nostr-02.czas.top,53.471,9.88208 +relay.nosto.re,51.8933,4.42083 +nostr.plantroon.com,50.1013,8.62643 +nostr.rblb.it,43.4633,11.8796 +nostr.thebiglake.org,32.71,-96.6745 +nostr.luisschwab.net,40.7357,-74.1724 +relay.electriclifestyle.com,26.2897,-80.1293 +librerelay.aaroniumii.com,43.6532,-79.3832 +nostr.88mph.life,40.7357,-74.1724 +shu02.shugur.net,21.4902,39.2246 +relay.hook.cafe,40.7357,-74.1724 +strfry.elswa-dev.online,48.8566,2.35222 +wot.sudocarlos.com,51.5072,-0.127586 +relay.islandbitcoin.com,12.8498,77.6545 +nostr.tadryanom.me,40.7357,-74.1724 +relay.zone667.com,60.1699,24.9384 +nostr.agentcampfire.com,50.8933,6.05805 +relay.ditto.pub,40.7357,-74.1724 +relay03.lnfi.network,39.0997,-94.5786 +relay2.angor.io,48.1046,11.6002 +srtrelay.c-stellar.net,40.7357,-74.1724 +relayone.soundhsa.com,33.1384,-95.6011 +relay.javi.space,43.4633,11.8796 +nostr.carroarmato0.be,50.9928,3.26317 +nostr.hekster.org,37.3986,-121.964 +strfry.shock.network,41.8959,-88.2169 +nostr.2b9t.xyz,34.0549,-118.243 +relay.toastr.net,40.8054,-74.0241 +relay.bitcoinveneto.org,64.1466,-21.9426 +relay.wavlake.com,41.2619,-95.8608 +relay.arx-ccn.com,50.4754,12.3683 +relay.cosmicbolt.net,37.3986,-121.964 +relay.mccormick.cx,52.3563,4.95714 +temp.iris.to,40.7357,-74.1724 +relay.vrtmrz.net,40.7357,-74.1724 +nostr-relay.zimage.com,34.282,-118.439 +nostr.data.haus,50.4754,12.3683 +ribo.us.nostria.app,41.5868,-93.625 nostr.vulpem.com,49.4543,11.0746 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.origin.land,35.6673,139.751 -nostr.bilthon.dev,25.8128,-80.2377 -relay.letsfo.com,51.098,17.0321 -nostr.4rs.nl,49.0291,8.35696 -relay02.lnfi.network,39.0997,-94.5786 -free.relayted.de,50.1109,8.68213 -nostr.spaceshell.xyz,43.6532,-79.3832 -relay04.lnfi.network,39.0997,-94.5786 -relay.wolfcoil.com,35.6092,139.73 -relay.mwaters.net,50.9871,2.12554 -relayrs.notoshi.win,43.6532,-79.3832 -nostr2.girino.org,43.6532,-79.3832 -relay.hasenpfeffr.com,39.0438,-77.4874 -gnostr.com,40.9017,29.1616 -relay.basspistol.org,46.2044,6.14316 -relay.internationalright-wing.org,-22.5022,-48.7114 -prl.plus,55.7623,37.6381 -relay.getsafebox.app,43.6532,-79.3832 -nostr.smut.cloud,43.6532,-79.3832 -relay.barine.co,43.6532,-79.3832 -alien.macneilmediagroup.com,43.6532,-79.3832 -nostr.davidebtc.me,51.5072,-0.127586 +relay.agora.social,50.7383,15.0648 +nostr.ovia.to,43.6532,-79.3832 +nostr.red5d.dev,40.7357,-74.1724 +orangesync.tech,50.1109,8.68213 +relay.fountain.fm,39.0997,-94.5786 +relay.aloftus.io,34.0881,-118.379 +nostr.hifish.org,47.4043,8.57398 +relay.siamdev.cc,13.9178,100.424 fenrir-s.notoshi.win,43.6532,-79.3832 -satsage.xyz,37.3986,-121.964 -nostr-relay.online,43.6532,-79.3832 -nostr.lostr.space,43.6532,-79.3832 -nostr.red5d.dev,43.6532,-79.3832 -relay.guggero.org,47.3769,8.54169 +nostr.overmind.lol,43.6532,-79.3832 +wheat.happytavern.co,40.7357,-74.1724 nostr.rtvslawenia.com,49.4543,11.0746 -ribo.af.nostria.app,-26.2041,28.0473 -relay.nostrdice.com,-33.8688,151.209 -relay.arx-ccn.com,50.4754,12.3683 -srtrelay.c-stellar.net,43.6532,-79.3832 -wot.soundhsa.com,34.0479,-118.256 -nostr.sathoarder.com,48.5734,7.75211 -wot.brightbolt.net,47.6735,-116.781 -nostr.data.haus,50.4754,12.3683 +relay.nostrhub.fr,48.1046,11.6002 +strfry.openhoofd.nl,51.9229,4.40833 +relay.usefusion.ai,38.7134,-78.1591 +relay.credenso.cafe,43.3601,-80.3127 +nostr.lostr.space,40.7357,-74.1724 relay.jmoose.rocks,60.1699,24.9384 -slick.mjex.me,39.048,-77.4817 -nostr.2b9t.xyz,34.0549,-118.243 +relay.nostromo.social,49.4543,11.0746 +nostr.jfischer.org,49.0291,8.35696 +relay.wolfcoil.com,35.6092,139.73 +nostr.thaliyal.com,40.8218,-74.45 +relay.magiccity.live,25.8128,-80.2377 +relay.puresignal.news,40.7357,-74.1724 +prl.plus,55.7623,37.6381 +wot.brightbolt.net,47.6735,-116.781 +relay.varke.eu,52.6921,6.19372 +alienos.libretechsystems.xyz,55.4724,9.87335 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +pyramid.fiatjaf.com,51.5072,-0.127586 +relay02.lnfi.network,39.0997,-94.5786 +nostr.davidebtc.me,50.1109,8.68213 +nostr-verified.wellorder.net,45.5201,-122.99 relay.cypherflow.ai,48.8566,2.35222 -nostr.overmind.lol,43.6532,-79.3832 -relay.mattybs.lol,43.6532,-79.3832 -nostr.lojong.info,43.6532,-79.3832 -relay.davidebtc.me,51.5072,-0.127586 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -nostr.stakey.net,52.3676,4.90414 -relay.13room.space,43.6532,-79.3832 -strfry.elswa-dev.online,48.8566,2.35222 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr.tadryanom.me,43.6532,-79.3832 -nostr-pub.wellorder.net,45.5201,-122.99 -nostr.hifish.org,47.4043,8.57398 -4u2ni0zjbjvni.clorecloud.net,43.6532,-79.3832 -nostr.mom,50.4754,12.3683 -dev-nostr.bityacht.io,25.0797,121.234 -relay.evanverma.com,40.8302,-74.1299 -nostr.rikmeijer.nl,50.4754,12.3683 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -nostr.azzamo.net,52.2633,21.0283 -nostr-01.yakihonne.com,1.32123,103.695 -relay.moinsen.com,50.4754,12.3683 -nostr.notribe.net,40.8302,-74.1299 -nostr.coincrowd.fund,39.0438,-77.4874 -relay.degmods.com,50.4754,12.3683 +nostr.snowbla.de,60.1699,24.9384 +inbox.azzamo.net,52.2633,21.0283 +shu01.shugur.net,21.4902,39.2246 +nostr.middling.mydns.jp,35.8099,140.12 +nostr.kalf.org,52.3676,4.90414 +relay.laantungir.net,-19.4692,-42.5315 relay.angor.io,48.1046,11.6002 -relay.sigit.io,50.4754,12.3683 -relay2.angor.io,48.1046,11.6002 -relay.cosmicbolt.net,37.3986,-121.964 +nostr2.girino.org,40.7357,-74.1724 +relay01.lnfi.network,39.0997,-94.5786 +nostr.chaima.info,51.223,6.78245 +x.kojira.io,43.6532,-79.3832 +shu04.shugur.net,25.2604,55.2989 +santo.iguanatech.net,40.8302,-74.1299 +relay.artx.market,43.652,-79.3633 +alien.macneilmediagroup.com,40.7357,-74.1724 +nostr.sathoarder.com,48.5734,7.75211 +zap.watch,45.5029,-73.5723 +relay.basspistol.org,46.2044,6.14316 +relay.13room.space,43.6532,-79.3832 +relay.bullishbounty.com,40.7357,-74.1724 +theoutpost.life,64.1476,-21.9392 +nostr.coincards.com,53.5501,-113.469 +black.nostrcity.club,41.8781,-87.6298 +relay.npubhaus.com,40.7357,-74.1724 +relay.freeplace.nl,52.3676,4.90414 +relay.seq1.net,43.6532,-79.3832 +ynostr.yael.at,60.1699,24.9384 +relay.nostr.vet,52.6467,4.7395 +relay.lifpay.me,1.35208,103.82 +relay.chakany.systems,43.6532,-79.3832 +relay.lightning.pub,41.8959,-88.2169 +wot.dtonon.com,43.6532,-79.3832 +yabu.me,35.6092,139.73 +wot.nostr.net,43.6532,-79.3832 +relay.libernet.app,40.7357,-74.1724 +relay04.lnfi.network,39.0997,-94.5786 +nostr.0x7e.xyz,47.4988,8.72369 +nostr.mikoshi.de,50.1109,8.68213 +wot.nostr.party,36.1627,-86.7816 +relay.letsfo.com,51.098,17.0321 +nostr.makibisskey.work,43.6532,-79.3832 +nostr.simplex.icu,50.8198,-1.08798 From ce31b858ab261bbaf5088c7f801ac3144833aab2 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 12 Oct 2025 06:20:12 +0000 Subject: [PATCH 05/24] Automated update of relay data - Sun Oct 12 06:20:12 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 481 +++++++++++++-------------- 1 file changed, 236 insertions(+), 245 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index eb5e8c277..876ce545d 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,269 +1,260 @@ Relay URL,Latitude,Longitude -relay-admin.thaliyal.com,40.8218,-74.45 -nostr.notribe.net,40.8302,-74.1299 -strfry.bonsai.com,37.8715,-122.273 -nostr-relay.online,40.7357,-74.1724 -shu05.shugur.net,48.8566,2.35222 -dev-nostr.bityacht.io,25.0797,121.234 -relay.nostrhub.tech,49.0291,8.35696 -relay.davidebtc.me,50.1109,8.68213 -relay.moinsen.com,50.4754,12.3683 -relay.olas.app,50.4754,12.3683 -mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 -orangepiller.org,60.1699,24.9384 -relayrs.notoshi.win,43.6532,-79.3832 -relay.guggero.org,47.3769,8.54169 -nostr.blankfors.se,60.1699,24.9384 +nostr.simplex.icu,50.8198,-1.08798 +adre.su,59.9311,30.3609 +relay.jeffg.fyi,43.6532,-79.3832 +noxir.kpherox.dev,34.8587,135.509 +relay.magiccity.live,25.8128,-80.2377 +nostr.luisschwab.net,43.6532,-79.3832 +relay.snort.social,40.7357,-74.1724 +nos.lol,50.4754,12.3683 +nostr.mom,50.4754,12.3683 +shu01.shugur.net,21.4902,39.2246 +wot.dtonon.com,40.7357,-74.1724 +nostr-2.21crypto.ch,47.4988,8.72369 +nostr.casa21.space,43.6532,-79.3832 +relay.dwadziesciajeden.pl,52.2297,21.0122 +shu02.shugur.net,21.4902,39.2246 +nostr.mikoshi.de,50.1109,8.68213 +relay.nostraddress.com,40.7357,-74.1724 +relay.btcforplebs.com,43.6532,-79.3832 +relay.jmoose.rocks,60.1699,24.9384 +nostr.kalf.org,52.3676,4.90414 +nostr2.girino.org,43.6532,-79.3832 +relayone.soundhsa.com,33.1384,-95.6011 +nostr.makibisskey.work,40.7357,-74.1724 +wot.basspistol.org,49.4521,11.0767 +wot.soundhsa.com,33.1384,-95.6011 +nostr.tac.lol,47.4748,-122.273 +relay-rpi.edufeed.org,49.4543,11.0746 +nostr.agentcampfire.com,50.8933,6.05805 +relay.tapestry.ninja,40.8054,-74.0241 +nostr.pleb.one,38.6327,-90.1961 +nostr.ovia.to,43.6532,-79.3832 +nostr.chaima.info,51.223,6.78245 +nostr.satstralia.com,64.1476,-21.9392 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.ngengine.org,43.6532,-79.3832 +nostr-relay.cbrx.io,43.6532,-79.3832 +wot.sudocarlos.com,51.5072,-0.127586 +nostr-verified.wellorder.net,45.5201,-122.99 wot.sovbit.host,64.1466,-21.9426 -nostr.huszonegy.world,47.4979,19.0402 -wot.sebastix.social,51.8933,4.42083 -articles.layer3.news,37.3387,-121.885 +r.bitcoinhold.net,40.7357,-74.1724 nostr.spicyz.io,40.7357,-74.1724 -nostr.jerrynya.fun,31.2304,121.474 -nostr.oxtr.dev,50.4754,12.3683 -relay.mwaters.net,50.9871,2.12554 -vitor.nostr1.com,40.7128,-74.006 -relay.lumina.rocks,49.0291,8.35695 -nostr-relay-1.trustlessenterprise.com,40.7357,-74.1724 -nostr.bilthon.dev,25.8128,-80.2377 -nostr.now,36.55,139.733 -nostr.girino.org,40.7357,-74.1724 -nostr-01.yakihonne.com,1.32123,103.695 -ribo.af.nostria.app,-26.2041,28.0473 -nostrelay.memory-art.xyz,43.6532,-79.3832 -relay.evanverma.com,40.8302,-74.1299 -a.nos.lol,50.4754,12.3683 -purpura.cloud,40.7357,-74.1724 -relay.snort.social,43.6532,-79.3832 -relay.holzeis.me,43.6532,-79.3832 -nostr.spaceshell.xyz,40.7128,-74.006 -nostr.liberty.fans,36.9104,-89.5875 -relay.fundstr.me,42.3601,-71.0589 -wot.basspistol.org,49.4521,11.0767 -ribo.eu.nostria.app,52.3676,4.90414 -relay.notoshi.win,13.4166,101.335 -relay.stream.labs.h3.se,59.4016,17.9455 -nostr.stakey.net,52.3676,4.90414 +relay.lightning.pub,41.8959,-88.2169 +satsage.xyz,37.3986,-121.964 relay.satlantis.io,32.8769,-80.0114 -nostr-2.21crypto.ch,47.4988,8.72369 -nostr.satstralia.com,64.1476,-21.9392 -slick.mjex.me,39.048,-77.4817 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay.origin.land,35.6673,139.751 -nostr.fbxl.net,48.382,-89.2502 -relay.nostr.place,32.7767,-96.797 -nr.yay.so,46.2126,6.1154 -nostream.breadslice.com,40.7357,-74.1724 -wot.tealeaf.dev,33.7488,-84.3877 -relay.primal.net,43.6532,-79.3832 -relay.chorus.community,50.1109,8.68213 +relay.credenso.cafe,43.3601,-80.3127 +nostr.sagaciousd.com,49.2827,-123.121 +relay.aloftus.io,34.0881,-118.379 +nostr.oxtr.dev,50.4754,12.3683 +relay.mattybs.lol,40.7357,-74.1724 wot.dergigi.com,64.1476,-21.9392 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -relay.mess.ch,46.948,7.44745 -relay.sigit.io,50.4754,12.3683 -relay-rpi.edufeed.org,49.4543,11.0746 -nostr.faultables.net,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -cyberspace.nostr1.com,40.7128,-74.006 -relay.endfiat.money,43.6532,-79.3832 -soloco.nl,43.6532,-79.3832 -nostr.kungfu-g.rip,33.7946,-84.4488 nostrelay.circum.space,51.2217,6.77616 -relay.trustroots.org,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 -relay.coinos.io,40.7357,-74.1724 +alienos.libretechsystems.xyz,55.4724,9.87335 relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.nostriot.com,41.5695,-83.9786 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr.einundzwanzig.space,50.1109,8.68213 -nostr.casa21.space,43.6532,-79.3832 -premium.primal.net,40.7357,-74.1724 -relay.tagayasu.xyz,43.6715,-79.38 -nostr.mom,50.4754,12.3683 -nostr.zenon.network,43.5009,-70.4428 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.g1sms.fr,43.9432,2.07537 -nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 -relay.illuminodes.com,47.6061,-122.333 -dizzyspells.nostr1.com,40.7057,-74.0136 +orangepiller.org,60.1699,24.9384 +theoutpost.life,64.1476,-21.9392 +wot.nostr.party,36.1627,-86.7816 +relay.origin.land,35.6673,139.751 +relay.degmods.com,50.4754,12.3683 +relay.nostrhub.tech,49.0291,8.35696 +relay.artx.market,43.652,-79.3633 +relay.nostromo.social,49.4543,11.0746 relay.mostro.network,40.8302,-74.1299 -relay.nostr.wirednet.jp,34.706,135.493 -relay.barine.co,43.6532,-79.3832 -relay.damus.io,43.6532,-79.3832 -relay.0xchat.com,1.35208,103.82 -relay.mattybs.lol,40.7357,-74.1724 -no.str.cr,9.92857,-84.0528 -relay.utxo.farm,35.6916,139.768 -nostr.pleb.one,38.6327,-90.1961 -relay-dev.satlantis.io,40.8302,-74.1299 -relay.nostrdice.com,-33.8688,151.209 -relay.nostraddress.com,40.7357,-74.1724 -satsage.xyz,37.3986,-121.964 -offchain.pub,36.1809,-115.241 -noxir.kpherox.dev,34.8587,135.509 -nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.nostrcheck.me,43.6532,-79.3832 +nostr.lostr.space,40.7357,-74.1724 +soloco.nl,40.7357,-74.1724 +nostr.notribe.net,40.8302,-74.1299 +relay03.lnfi.network,39.0997,-94.5786 +orangesync.tech,50.1109,8.68213 +nostr.carroarmato0.be,50.9928,3.26317 +nostr.0x7e.xyz,47.4988,8.72369 +nostr.einundzwanzig.space,50.1109,8.68213 +relay04.lnfi.network,39.0997,-94.5786 +relay.fundstr.me,42.3601,-71.0589 +nostr.21crypto.ch,47.4988,8.72369 +relay.stream.labs.h3.se,59.4016,17.9455 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay.etch.social,41.2619,-95.8608 +mhp258zrpiiwn.clorecloud.net,40.7357,-74.1724 +nostrcheck.tnsor.network,43.6532,-79.3832 khatru.nostrver.se,51.8933,4.42083 -purplerelay.com,50.1109,8.68213 -relay.tapestry.ninja,40.8054,-74.0241 -nostr.night7.space,50.4754,12.3683 +nostr.data.haus,50.4754,12.3683 +relay.libernet.app,43.6532,-79.3832 +shu05.shugur.net,48.8566,2.35222 +relay.primal.net,43.6532,-79.3832 +strfry.bonsai.com,37.8715,-122.273 +santo.iguanatech.net,40.8302,-74.1299 +relay.angor.io,48.1046,11.6002 +nostr.tadryanom.me,40.7357,-74.1724 +pyramid.fiatjaf.com,51.5072,-0.127586 +dev-relay.lnfi.network,39.0997,-94.5786 nostr.rikmeijer.nl,50.4754,12.3683 -relay1.nostrchat.io,60.1699,24.9384 -nostr.21crypto.ch,47.4988,8.72369 -wot.soundhsa.com,33.1384,-95.6011 -relay.orangepill.ovh,49.1689,-0.358841 -talon.quest,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -wot.codingarena.top,50.4754,12.3683 -fanfares.nostr1.com,40.7128,-74.006 +strfry.openhoofd.nl,51.9229,4.40833 +nostr.noones.com,50.1109,8.68213 +relay.varke.eu,52.6921,6.19372 +nostr.zenon.network,43.5009,-70.4428 +schnorr.me,43.6532,-79.3832 +relay.hasenpfeffr.com,39.0438,-77.4874 gnostr.com,42.6978,23.3246 -nostrcheck.tnsor.network,40.7357,-74.1724 -nostrelites.org,41.8781,-87.6298 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.fr13nd5.com,52.5233,13.3426 -wot.nostr.place,30.2672,-97.7431 -ithurtswhenip.ee,51.223,6.78245 -relay.dwadziesciajeden.pl,52.2297,21.0122 -relay2.ngengine.org,40.7357,-74.1724 -relay.nostr.net,50.4754,12.3683 -nostr-relay.cbrx.io,40.7357,-74.1724 -dev-relay.lnfi.network,39.0997,-94.5786 -relay.jeffg.fyi,43.6532,-79.3832 -relay.ngengine.org,40.7357,-74.1724 -nos.xmark.cc,50.6924,3.20113 -relay.21e6.cz,50.1682,14.0546 -relay.degmods.com,50.4754,12.3683 -nostr.coincrowd.fund,39.0438,-77.4874 -nostr.myshosholoza.co.za,52.3676,4.90414 -relay.digitalezukunft.cyou,45.5019,-73.5674 -r.lostr.net,52.3676,4.90414 -relay.etch.social,41.2619,-95.8608 -nostr.tac.lol,47.4748,-122.273 -nostr.azzamo.net,52.2633,21.0283 -nostr.4rs.nl,49.0291,8.35696 -nostr-03.dorafactory.org,1.35208,103.82 -relay.copylaradio.com,51.223,6.78245 +librerelay.aaroniumii.com,40.7357,-74.1724 +zap.watch,45.5029,-73.5723 +relay.toastr.net,40.8054,-74.0241 +relay.illuminodes.com,47.6061,-122.333 +nostr.coincards.com,53.5501,-113.469 +premium.primal.net,40.7357,-74.1724 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.wolfcoil.com,35.6092,139.73 nostr.camalolo.com,24.1469,120.684 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.nostx.io,43.6532,-79.3832 -r.bitcoinhold.net,43.6532,-79.3832 -nproxy.kristapsk.lv,60.1699,24.9384 -adre.su,59.9311,30.3609 -relay.hasenpfeffr.com,39.0438,-77.4874 -nos.lol,50.4754,12.3683 -relay.nostr.band,60.1699,24.9384 -nostr-02.czas.top,53.471,9.88208 -relay.nosto.re,51.8933,4.42083 -nostr.plantroon.com,50.1013,8.62643 -nostr.rblb.it,43.4633,11.8796 -nostr.thebiglake.org,32.71,-96.6745 -nostr.luisschwab.net,40.7357,-74.1724 -relay.electriclifestyle.com,26.2897,-80.1293 -librerelay.aaroniumii.com,43.6532,-79.3832 +relay.fountain.fm,39.0997,-94.5786 +r.lostr.net,52.3676,4.90414 +strfry.shock.network,41.8959,-88.2169 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.lumina.rocks,49.0291,8.35695 +slick.mjex.me,39.048,-77.4817 +relay.nostrdice.com,-33.8688,151.209 +ribo.af.nostria.app,-26.2041,28.0473 nostr.88mph.life,40.7357,-74.1724 -shu02.shugur.net,21.4902,39.2246 -relay.hook.cafe,40.7357,-74.1724 -strfry.elswa-dev.online,48.8566,2.35222 -wot.sudocarlos.com,51.5072,-0.127586 -relay.islandbitcoin.com,12.8498,77.6545 -nostr.tadryanom.me,40.7357,-74.1724 -relay.zone667.com,60.1699,24.9384 -nostr.agentcampfire.com,50.8933,6.05805 -relay.ditto.pub,40.7357,-74.1724 -relay03.lnfi.network,39.0997,-94.5786 -relay2.angor.io,48.1046,11.6002 +nostr-relay.online,43.6532,-79.3832 +nostr-01.yakihonne.com,1.32123,103.695 srtrelay.c-stellar.net,40.7357,-74.1724 -relayone.soundhsa.com,33.1384,-95.6011 +relay.trustroots.org,43.6532,-79.3832 relay.javi.space,43.4633,11.8796 -nostr.carroarmato0.be,50.9928,3.26317 -nostr.hekster.org,37.3986,-121.964 -strfry.shock.network,41.8959,-88.2169 -nostr.2b9t.xyz,34.0549,-118.243 -relay.toastr.net,40.8054,-74.0241 -relay.bitcoinveneto.org,64.1466,-21.9426 -relay.wavlake.com,41.2619,-95.8608 -relay.arx-ccn.com,50.4754,12.3683 -relay.cosmicbolt.net,37.3986,-121.964 -relay.mccormick.cx,52.3563,4.95714 -temp.iris.to,40.7357,-74.1724 -relay.vrtmrz.net,40.7357,-74.1724 -nostr-relay.zimage.com,34.282,-118.439 -nostr.data.haus,50.4754,12.3683 -ribo.us.nostria.app,41.5868,-93.625 -nostr.vulpem.com,49.4543,11.0746 -relay.agora.social,50.7383,15.0648 -nostr.ovia.to,43.6532,-79.3832 -nostr.red5d.dev,40.7357,-74.1724 -orangesync.tech,50.1109,8.68213 -relay.fountain.fm,39.0997,-94.5786 -relay.aloftus.io,34.0881,-118.379 -nostr.hifish.org,47.4043,8.57398 -relay.siamdev.cc,13.9178,100.424 -fenrir-s.notoshi.win,43.6532,-79.3832 -nostr.overmind.lol,43.6532,-79.3832 -wheat.happytavern.co,40.7357,-74.1724 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.nostrhub.fr,48.1046,11.6002 -strfry.openhoofd.nl,51.9229,4.40833 -relay.usefusion.ai,38.7134,-78.1591 -relay.credenso.cafe,43.3601,-80.3127 -nostr.lostr.space,40.7357,-74.1724 -relay.jmoose.rocks,60.1699,24.9384 -relay.nostromo.social,49.4543,11.0746 -nostr.jfischer.org,49.0291,8.35696 -relay.wolfcoil.com,35.6092,139.73 -nostr.thaliyal.com,40.8218,-74.45 -relay.magiccity.live,25.8128,-80.2377 -relay.puresignal.news,40.7357,-74.1724 -prl.plus,55.7623,37.6381 -wot.brightbolt.net,47.6735,-116.781 -relay.varke.eu,52.6921,6.19372 -alienos.libretechsystems.xyz,55.4724,9.87335 +nostr-dev.wellorder.net,45.5201,-122.99 relay.goodmorningbitcoin.com,43.6532,-79.3832 -pyramid.fiatjaf.com,51.5072,-0.127586 -relay02.lnfi.network,39.0997,-94.5786 +relay.islandbitcoin.com,12.8498,77.6545 +relay.nostrhub.fr,48.1046,11.6002 +wot.nostr.net,40.7357,-74.1724 +nostr.faultables.net,43.6532,-79.3832 +relay.notoshi.win,13.4166,101.335 +fenrir-s.notoshi.win,43.6532,-79.3832 +vitor.nostr1.com,40.7128,-74.006 +wot.nostr.place,30.2672,-97.7431 +relay.olas.app,50.4754,12.3683 nostr.davidebtc.me,50.1109,8.68213 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.cypherflow.ai,48.8566,2.35222 -nostr.snowbla.de,60.1699,24.9384 -inbox.azzamo.net,52.2633,21.0283 -shu01.shugur.net,21.4902,39.2246 -nostr.middling.mydns.jp,35.8099,140.12 -nostr.kalf.org,52.3676,4.90414 -relay.laantungir.net,-19.4692,-42.5315 -relay.angor.io,48.1046,11.6002 -nostr2.girino.org,40.7357,-74.1724 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.orangepill.ovh,49.1689,-0.358841 +relay.chakany.systems,43.6532,-79.3832 +purpura.cloud,43.6532,-79.3832 +relay.artiostr.ch,43.6532,-79.3832 +nostr.overmind.lol,43.6532,-79.3832 +nostrelay.memory-art.xyz,43.6532,-79.3832 +nostr.liberty.fans,36.9104,-89.5875 +relay.damus.io,40.7357,-74.1724 +relay.moinsen.com,50.4754,12.3683 +relay.holzeis.me,40.7357,-74.1724 +nostr.vulpem.com,49.4543,11.0746 +relay.davidebtc.me,50.1109,8.68213 +nostr.hifish.org,47.4043,8.57398 +relay.mess.ch,46.948,7.44745 relay01.lnfi.network,39.0997,-94.5786 -nostr.chaima.info,51.223,6.78245 +relay.tagayasu.xyz,43.6715,-79.38 +dev-nostr.bityacht.io,25.0797,121.234 +relay.puresignal.news,43.6532,-79.3832 +ithurtswhenip.ee,51.223,6.78245 +relay.21e6.cz,50.1682,14.0546 +relay.0xchat.com,1.35208,103.82 +nostr.coincrowd.fund,39.0438,-77.4874 +relay.coinos.io,40.7357,-74.1724 +relay.hook.cafe,43.6532,-79.3832 +relay02.lnfi.network,39.0997,-94.5786 x.kojira.io,43.6532,-79.3832 -shu04.shugur.net,25.2604,55.2989 -santo.iguanatech.net,40.8302,-74.1299 -relay.artx.market,43.652,-79.3633 -alien.macneilmediagroup.com,40.7357,-74.1724 -nostr.sathoarder.com,48.5734,7.75211 -zap.watch,45.5029,-73.5723 +ribo.us.nostria.app,41.5868,-93.625 +relay.vrtmrz.net,40.7357,-74.1724 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +relay.mccormick.cx,52.3563,4.95714 +relay.nosto.re,51.8933,4.42083 +offchain.pub,36.1809,-115.241 +relay.chorus.community,50.1109,8.68213 +nostr-pub.wellorder.net,45.5201,-122.99 +cyberspace.nostr1.com,40.7057,-74.0136 +nos.xmark.cc,50.6924,3.20113 +nostr-02.yakihonne.com,1.32123,103.695 +ribo.eu.nostria.app,52.3676,4.90414 +relay.nostr.vet,52.6467,4.7395 +relay.evanverma.com,40.8302,-74.1299 +relay.arx-ccn.com,50.4754,12.3683 +nostr-02.czas.top,53.471,9.88208 +relay.getsafebox.app,43.6532,-79.3832 +relay-dev.satlantis.io,40.8302,-74.1299 +relayone.geektank.ai,18.2148,-63.0574 +nostr.jerrynya.fun,31.2304,121.474 +relay.fr13nd5.com,52.5233,13.3426 +relay.seq1.net,43.6532,-79.3832 +relay.wellorder.net,45.5201,-122.99 +strfry.felixzieger.de,50.1013,8.62643 +nostr.stakey.net,52.3676,4.90414 +freelay.sovbit.host,64.1476,-21.9392 +alien.macneilmediagroup.com,43.6532,-79.3832 +prl.plus,55.7623,37.6381 relay.basspistol.org,46.2044,6.14316 -relay.13room.space,43.6532,-79.3832 +shu04.shugur.net,25.2604,55.2989 +nostr.bilthon.dev,25.8128,-80.2377 +relay.nostr.wirednet.jp,34.706,135.493 +inbox.azzamo.net,52.2633,21.0283 +relay.guggero.org,47.3769,8.54169 +dizzyspells.nostr1.com,40.7128,-74.006 +nostr.n7ekb.net,47.4941,-122.294 +nostr.night7.space,50.4754,12.3683 +relay.nostr.place,32.7767,-96.797 +relay.wavlake.com,41.2619,-95.8608 +temp.iris.to,40.7357,-74.1724 +relay.nostr.band,60.1699,24.9384 +relay2.angor.io,48.1046,11.6002 +strfry.elswa-dev.online,48.8566,2.35222 +no.str.cr,9.92857,-84.0528 +nostr-relay.psfoundation.info,39.0438,-77.4874 +yabu.me,35.6092,139.73 +nostr.blankfors.se,60.1699,24.9384 +relay.agorist.space,52.3734,4.89406 +purplerelay.com,50.1109,8.68213 relay.bullishbounty.com,40.7357,-74.1724 -theoutpost.life,64.1476,-21.9392 -nostr.coincards.com,53.5501,-113.469 +fanfares.nostr1.com,40.7057,-74.0136 +nostr.azzamo.net,52.2633,21.0283 +relay.ditto.pub,40.7357,-74.1724 +wot.sebastix.social,51.8933,4.42083 +relay.agora.social,50.7383,15.0648 +nproxy.kristapsk.lv,60.1699,24.9384 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostrcheck.me,40.7357,-74.1724 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.mwaters.net,50.9871,2.12554 +relayrs.notoshi.win,43.6532,-79.3832 +relay.bitcoinveneto.org,64.1466,-21.9426 +nostr.red5d.dev,43.6532,-79.3832 black.nostrcity.club,41.8781,-87.6298 -relay.npubhaus.com,40.7357,-74.1724 +nostream.breadslice.com,43.6532,-79.3832 +nostr.thebiglake.org,32.71,-96.6745 +relay.usefusion.ai,38.7134,-78.1591 +nostr.4rs.nl,49.0291,8.35696 +articles.layer3.news,37.3387,-121.885 +relay.nostriot.com,41.5695,-83.9786 +relay.endfiat.money,40.7128,-74.006 relay.freeplace.nl,52.3676,4.90414 -relay.seq1.net,43.6532,-79.3832 -ynostr.yael.at,60.1699,24.9384 -relay.nostr.vet,52.6467,4.7395 -relay.lifpay.me,1.35208,103.82 -relay.chakany.systems,43.6532,-79.3832 -relay.lightning.pub,41.8959,-88.2169 -wot.dtonon.com,43.6532,-79.3832 -yabu.me,35.6092,139.73 -wot.nostr.net,43.6532,-79.3832 -relay.libernet.app,40.7357,-74.1724 -relay04.lnfi.network,39.0997,-94.5786 -nostr.0x7e.xyz,47.4988,8.72369 -nostr.mikoshi.de,50.1109,8.68213 -wot.nostr.party,36.1627,-86.7816 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr-relay.zimage.com,34.282,-118.439 +relay.cosmicbolt.net,37.3986,-121.964 +nostr.myshosholoza.co.za,52.3676,4.90414 +relay1.nostrchat.io,60.1699,24.9384 +relay.bitcoindistrict.org,43.6532,-79.3832 +nostr.hekster.org,37.3986,-121.964 +relay2.ngengine.org,40.7357,-74.1724 +nostr-03.dorafactory.org,1.35208,103.82 +relay.cypherflow.ai,48.8566,2.35222 +relay.siamdev.cc,13.8434,100.363 +nostr.rblb.it,43.4633,11.8796 +relay.nostriches.club,43.6532,-79.3832 +relay.nostr.net,50.4754,12.3683 +nostr.openhoofd.nl,51.9229,4.40833 +nostr.girino.org,40.7357,-74.1724 +a.nos.lol,50.4754,12.3683 relay.letsfo.com,51.098,17.0321 -nostr.makibisskey.work,43.6532,-79.3832 -nostr.simplex.icu,50.8198,-1.08798 +relay.electriclifestyle.com,26.2897,-80.1293 +wheat.happytavern.co,40.7357,-74.1724 +nostr.huszonegy.world,47.4979,19.0402 +relay.utxo.farm,35.6916,139.768 +nostr.sathoarder.com,48.5734,7.75211 +relay.sigit.io,50.4754,12.3683 +ynostr.yael.at,60.1699,24.9384 +nostr.plantroon.com,50.1013,8.62643 +nr.yay.so,46.2126,6.1154 From 19f647367cc2a2745bbb25fa631eb0b76a364a0c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 19 Oct 2025 06:21:51 +0000 Subject: [PATCH 06/24] Automated update of relay data - Sun Oct 19 06:21:51 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 475 ++++++++++++++------------- 1 file changed, 243 insertions(+), 232 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 876ce545d..c6f201bb6 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,260 +1,271 @@ Relay URL,Latitude,Longitude -nostr.simplex.icu,50.8198,-1.08798 -adre.su,59.9311,30.3609 -relay.jeffg.fyi,43.6532,-79.3832 -noxir.kpherox.dev,34.8587,135.509 -relay.magiccity.live,25.8128,-80.2377 -nostr.luisschwab.net,43.6532,-79.3832 -relay.snort.social,40.7357,-74.1724 -nos.lol,50.4754,12.3683 -nostr.mom,50.4754,12.3683 -shu01.shugur.net,21.4902,39.2246 -wot.dtonon.com,40.7357,-74.1724 -nostr-2.21crypto.ch,47.4988,8.72369 -nostr.casa21.space,43.6532,-79.3832 -relay.dwadziesciajeden.pl,52.2297,21.0122 -shu02.shugur.net,21.4902,39.2246 -nostr.mikoshi.de,50.1109,8.68213 -relay.nostraddress.com,40.7357,-74.1724 -relay.btcforplebs.com,43.6532,-79.3832 -relay.jmoose.rocks,60.1699,24.9384 +slick.mjex.me,39.048,-77.4817 +relay.guggero.org,47.3769,8.54169 +nostr-relay.online,40.7357,-74.1724 +relay.bullishbounty.com,40.7357,-74.1724 nostr.kalf.org,52.3676,4.90414 -nostr2.girino.org,43.6532,-79.3832 -relayone.soundhsa.com,33.1384,-95.6011 -nostr.makibisskey.work,40.7357,-74.1724 -wot.basspistol.org,49.4521,11.0767 -wot.soundhsa.com,33.1384,-95.6011 -nostr.tac.lol,47.4748,-122.273 -relay-rpi.edufeed.org,49.4543,11.0746 -nostr.agentcampfire.com,50.8933,6.05805 -relay.tapestry.ninja,40.8054,-74.0241 -nostr.pleb.one,38.6327,-90.1961 -nostr.ovia.to,43.6532,-79.3832 -nostr.chaima.info,51.223,6.78245 -nostr.satstralia.com,64.1476,-21.9392 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -relay.ngengine.org,43.6532,-79.3832 -nostr-relay.cbrx.io,43.6532,-79.3832 -wot.sudocarlos.com,51.5072,-0.127586 -nostr-verified.wellorder.net,45.5201,-122.99 -wot.sovbit.host,64.1466,-21.9426 -r.bitcoinhold.net,40.7357,-74.1724 -nostr.spicyz.io,40.7357,-74.1724 -relay.lightning.pub,41.8959,-88.2169 -satsage.xyz,37.3986,-121.964 -relay.satlantis.io,32.8769,-80.0114 -relay.credenso.cafe,43.3601,-80.3127 -nostr.sagaciousd.com,49.2827,-123.121 -relay.aloftus.io,34.0881,-118.379 -nostr.oxtr.dev,50.4754,12.3683 -relay.mattybs.lol,40.7357,-74.1724 -wot.dergigi.com,64.1476,-21.9392 -nostrelay.circum.space,51.2217,6.77616 -alienos.libretechsystems.xyz,55.4724,9.87335 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -orangepiller.org,60.1699,24.9384 -theoutpost.life,64.1476,-21.9392 -wot.nostr.party,36.1627,-86.7816 -relay.origin.land,35.6673,139.751 -relay.degmods.com,50.4754,12.3683 -relay.nostrhub.tech,49.0291,8.35696 -relay.artx.market,43.652,-79.3633 -relay.nostromo.social,49.4543,11.0746 -relay.mostro.network,40.8302,-74.1299 -relay.nostrcheck.me,43.6532,-79.3832 -nostr.lostr.space,40.7357,-74.1724 -soloco.nl,40.7357,-74.1724 +relay.hook.cafe,40.7357,-74.1724 +nostrcheck.me,43.6532,-79.3832 +relay.vrtmrz.net,40.7357,-74.1724 nostr.notribe.net,40.8302,-74.1299 -relay03.lnfi.network,39.0997,-94.5786 -orangesync.tech,50.1109,8.68213 -nostr.carroarmato0.be,50.9928,3.26317 -nostr.0x7e.xyz,47.4988,8.72369 -nostr.einundzwanzig.space,50.1109,8.68213 -relay04.lnfi.network,39.0997,-94.5786 -relay.fundstr.me,42.3601,-71.0589 -nostr.21crypto.ch,47.4988,8.72369 -relay.stream.labs.h3.se,59.4016,17.9455 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay.etch.social,41.2619,-95.8608 -mhp258zrpiiwn.clorecloud.net,40.7357,-74.1724 -nostrcheck.tnsor.network,43.6532,-79.3832 -khatru.nostrver.se,51.8933,4.42083 -nostr.data.haus,50.4754,12.3683 -relay.libernet.app,43.6532,-79.3832 -shu05.shugur.net,48.8566,2.35222 -relay.primal.net,43.6532,-79.3832 -strfry.bonsai.com,37.8715,-122.273 -santo.iguanatech.net,40.8302,-74.1299 -relay.angor.io,48.1046,11.6002 -nostr.tadryanom.me,40.7357,-74.1724 -pyramid.fiatjaf.com,51.5072,-0.127586 -dev-relay.lnfi.network,39.0997,-94.5786 -nostr.rikmeijer.nl,50.4754,12.3683 -strfry.openhoofd.nl,51.9229,4.40833 +nos.lol,50.4754,12.3683 +relay.notoshi.win,13.4166,101.335 +nostrelites.org,41.8781,-87.6298 +nostr-02.czas.top,53.471,9.88208 +relay.2nix.de,60.1699,24.9384 +nostr.faultables.net,43.6532,-79.3832 nostr.noones.com,50.1109,8.68213 -relay.varke.eu,52.6921,6.19372 -nostr.zenon.network,43.5009,-70.4428 -schnorr.me,43.6532,-79.3832 -relay.hasenpfeffr.com,39.0438,-77.4874 -gnostr.com,42.6978,23.3246 -librerelay.aaroniumii.com,40.7357,-74.1724 -zap.watch,45.5029,-73.5723 +relay.nostromo.social,49.4543,11.0746 +keys.nostr1.com,40.7057,-74.0136 relay.toastr.net,40.8054,-74.0241 -relay.illuminodes.com,47.6061,-122.333 -nostr.coincards.com,53.5501,-113.469 -premium.primal.net,40.7357,-74.1724 -nostr.rtvslawenia.com,49.4543,11.0746 +nostr.spicyz.io,40.7357,-74.1724 +shu04.shugur.net,25.2604,55.2989 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.freeplace.nl,52.3676,4.90414 relay.wolfcoil.com,35.6092,139.73 +relay2.ngengine.org,43.6532,-79.3832 +nostr.davidebtc.me,50.1109,8.68213 +inbox.azzamo.net,52.2633,21.0283 +relay.arx-ccn.com,50.4754,12.3683 +nostr2.girino.org,43.6532,-79.3832 nostr.camalolo.com,24.1469,120.684 -relay.fountain.fm,39.0997,-94.5786 +nostr.mom,50.4754,12.3683 +relayone.soundhsa.com,33.1384,-95.6011 +relay.zone667.com,60.1699,24.9384 +nr.yay.so,46.2126,6.1154 r.lostr.net,52.3676,4.90414 -strfry.shock.network,41.8959,-88.2169 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.lumina.rocks,49.0291,8.35695 -slick.mjex.me,39.048,-77.4817 -relay.nostrdice.com,-33.8688,151.209 -ribo.af.nostria.app,-26.2041,28.0473 -nostr.88mph.life,40.7357,-74.1724 -nostr-relay.online,43.6532,-79.3832 -nostr-01.yakihonne.com,1.32123,103.695 -srtrelay.c-stellar.net,40.7357,-74.1724 -relay.trustroots.org,43.6532,-79.3832 -relay.javi.space,43.4633,11.8796 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -relay.islandbitcoin.com,12.8498,77.6545 -relay.nostrhub.fr,48.1046,11.6002 -wot.nostr.net,40.7357,-74.1724 -nostr.faultables.net,43.6532,-79.3832 -relay.notoshi.win,13.4166,101.335 -fenrir-s.notoshi.win,43.6532,-79.3832 -vitor.nostr1.com,40.7128,-74.006 -wot.nostr.place,30.2672,-97.7431 -relay.olas.app,50.4754,12.3683 -nostr.davidebtc.me,50.1109,8.68213 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.orangepill.ovh,49.1689,-0.358841 -relay.chakany.systems,43.6532,-79.3832 -purpura.cloud,43.6532,-79.3832 -relay.artiostr.ch,43.6532,-79.3832 -nostr.overmind.lol,43.6532,-79.3832 -nostrelay.memory-art.xyz,43.6532,-79.3832 -nostr.liberty.fans,36.9104,-89.5875 -relay.damus.io,40.7357,-74.1724 -relay.moinsen.com,50.4754,12.3683 -relay.holzeis.me,40.7357,-74.1724 -nostr.vulpem.com,49.4543,11.0746 -relay.davidebtc.me,50.1109,8.68213 -nostr.hifish.org,47.4043,8.57398 -relay.mess.ch,46.948,7.44745 -relay01.lnfi.network,39.0997,-94.5786 -relay.tagayasu.xyz,43.6715,-79.38 +zap.watch,45.5029,-73.5723 +relay.evanverma.com,40.8302,-74.1299 +nostr.sagaciousd.com,49.2827,-123.121 dev-nostr.bityacht.io,25.0797,121.234 -relay.puresignal.news,43.6532,-79.3832 -ithurtswhenip.ee,51.223,6.78245 -relay.21e6.cz,50.1682,14.0546 -relay.0xchat.com,1.35208,103.82 -nostr.coincrowd.fund,39.0438,-77.4874 -relay.coinos.io,40.7357,-74.1724 -relay.hook.cafe,43.6532,-79.3832 -relay02.lnfi.network,39.0997,-94.5786 -x.kojira.io,43.6532,-79.3832 -ribo.us.nostria.app,41.5868,-93.625 -relay.vrtmrz.net,40.7357,-74.1724 +relay.dwadziesciajeden.pl,52.2297,21.0122 nostr.mehdibekhtaoui.com,49.4939,-1.54813 -relay.mccormick.cx,52.3563,4.95714 -relay.nosto.re,51.8933,4.42083 +nostr.night7.space,50.4754,12.3683 +wot.basspistol.org,49.4521,11.0767 +nostr.hekster.org,37.3986,-121.964 +relay.lumina.rocks,49.0291,8.35695 offchain.pub,36.1809,-115.241 -relay.chorus.community,50.1109,8.68213 -nostr-pub.wellorder.net,45.5201,-122.99 -cyberspace.nostr1.com,40.7057,-74.0136 -nos.xmark.cc,50.6924,3.20113 +satsage.xyz,37.3986,-121.964 +nostr.openhoofd.nl,51.9229,4.40833 +nostrelay.memory-art.xyz,43.6532,-79.3832 nostr-02.yakihonne.com,1.32123,103.695 -ribo.eu.nostria.app,52.3676,4.90414 -relay.nostr.vet,52.6467,4.7395 -relay.evanverma.com,40.8302,-74.1299 -relay.arx-ccn.com,50.4754,12.3683 -nostr-02.czas.top,53.471,9.88208 -relay.getsafebox.app,43.6532,-79.3832 -relay-dev.satlantis.io,40.8302,-74.1299 -relayone.geektank.ai,18.2148,-63.0574 -nostr.jerrynya.fun,31.2304,121.474 +yabu.me,35.6092,139.73 +relay.magiccity.live,25.8128,-80.2377 +wot.soundhsa.com,33.1384,-95.6011 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.upleb.uk,52.2297,21.0122 +soloco.nl,40.7357,-74.1724 +nostr.plantroon.com,50.1013,8.62643 +relay.angor.io,48.1046,11.6002 +relay.sigit.io,50.4754,12.3683 +khatru.nostrver.se,51.8933,4.42083 +nostrelay.circum.space,51.2217,6.77616 +nproxy.kristapsk.lv,60.1699,24.9384 +nostr.chaima.info,51.223,6.78245 +nostr.bilthon.dev,25.8128,-80.2377 +nostr.azzamo.net,52.2633,21.0283 relay.fr13nd5.com,52.5233,13.3426 -relay.seq1.net,43.6532,-79.3832 -relay.wellorder.net,45.5201,-122.99 +nostr.agentcampfire.com,50.8933,6.05805 +relay.uid.ovh,43.6532,-79.3832 +nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 +wot.sovbit.host,64.1466,-21.9426 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.tagayasu.xyz,43.6715,-79.38 +relay.nostr.wirednet.jp,34.706,135.493 +wot.nostr.place,30.2672,-97.7431 +relay.libernet.app,43.6532,-79.3832 +purpura.cloud,43.6532,-79.3832 +adre.su,59.9311,30.3609 strfry.felixzieger.de,50.1013,8.62643 -nostr.stakey.net,52.3676,4.90414 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.islandbitcoin.com,12.8498,77.6545 +gnostr.com,42.6978,23.3246 +relay.davidebtc.me,50.1109,8.68213 freelay.sovbit.host,64.1476,-21.9392 -alien.macneilmediagroup.com,43.6532,-79.3832 -prl.plus,55.7623,37.6381 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.red5d.dev,43.6532,-79.3832 +relay.nostriches.club,43.6532,-79.3832 relay.basspistol.org,46.2044,6.14316 -shu04.shugur.net,25.2604,55.2989 -nostr.bilthon.dev,25.8128,-80.2377 -relay.nostr.wirednet.jp,34.706,135.493 -inbox.azzamo.net,52.2633,21.0283 -relay.guggero.org,47.3769,8.54169 -dizzyspells.nostr1.com,40.7128,-74.006 -nostr.n7ekb.net,47.4941,-122.294 -nostr.night7.space,50.4754,12.3683 +relay.ditto.pub,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.stream.labs.h3.se,59.4016,17.9455 +a.nos.lol,50.4754,12.3683 +relay.nostraddress.com,40.7357,-74.1724 +dev-relay.lnfi.network,39.0997,-94.5786 +relay.cosmicbolt.net,37.3986,-121.964 +relay03.lnfi.network,39.0997,-94.5786 +relay04.lnfi.network,39.0997,-94.5786 +nostr.snowbla.de,60.1699,24.9384 +santo.iguanatech.net,40.8302,-74.1299 +nostr.myshosholoza.co.za,52.3676,4.90414 +nostr-01.yakihonne.com,1.32123,103.695 +relay.usefusion.ai,38.7134,-78.1591 relay.nostr.place,32.7767,-96.797 -relay.wavlake.com,41.2619,-95.8608 -temp.iris.to,40.7357,-74.1724 -relay.nostr.band,60.1699,24.9384 -relay2.angor.io,48.1046,11.6002 -strfry.elswa-dev.online,48.8566,2.35222 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.coincards.com,53.5501,-113.469 +relay.coinos.io,40.7357,-74.1724 +relay01.lnfi.network,39.0997,-94.5786 no.str.cr,9.92857,-84.0528 -nostr-relay.psfoundation.info,39.0438,-77.4874 -yabu.me,35.6092,139.73 -nostr.blankfors.se,60.1699,24.9384 -relay.agorist.space,52.3734,4.89406 -purplerelay.com,50.1109,8.68213 -relay.bullishbounty.com,40.7357,-74.1724 -fanfares.nostr1.com,40.7057,-74.0136 -nostr.azzamo.net,52.2633,21.0283 -relay.ditto.pub,40.7357,-74.1724 -wot.sebastix.social,51.8933,4.42083 +relay.holzeis.me,43.6532,-79.3832 relay.agora.social,50.7383,15.0648 -nproxy.kristapsk.lv,60.1699,24.9384 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostrcheck.me,40.7357,-74.1724 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +theoutpost.life,64.1476,-21.9392 +articles.layer3.news,37.3387,-121.885 +relay.primal.net,40.7357,-74.1724 +nostr-2.21crypto.ch,47.4988,8.72369 +relay.puresignal.news,40.7357,-74.1724 +pyramid.fiatjaf.com,51.5072,-0.127586 +relay.wavlake.com,41.2619,-95.8608 +nostr.0x7e.xyz,47.4988,8.72369 +relay.21e6.cz,50.1682,14.0546 +nostr-relay.zimage.com,34.282,-118.439 +relay.fundstr.me,42.3601,-71.0589 +temp.iris.to,43.6532,-79.3832 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.agorist.space,52.3734,4.89406 relay.mwaters.net,50.9871,2.12554 +wot.utxo.one,40.7128,-74.006 +relay.utxo.farm,35.6916,139.768 relayrs.notoshi.win,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 -nostr.red5d.dev,43.6532,-79.3832 -black.nostrcity.club,41.8781,-87.6298 -nostream.breadslice.com,43.6532,-79.3832 +r.bitcoinhold.net,43.6532,-79.3832 +nostr.huszonegy.world,47.4979,19.0402 +relay.nosto.re,51.8933,4.42083 +relay.0xchat.com,1.35208,103.82 +relay.nostrhub.tech,49.0291,8.35696 +purplerelay.com,50.1109,8.68213 +nostr.namek.link,40.7357,-74.1724 nostr.thebiglake.org,32.71,-96.6745 -relay.usefusion.ai,38.7134,-78.1591 +nostr-relay.psfoundation.info,39.0438,-77.4874 +wot.dergigi.com,64.1476,-21.9392 +nostr.carroarmato0.be,50.9928,3.26317 +nostr.21crypto.ch,47.4988,8.72369 +relay.nostr.net,50.4754,12.3683 +cyberspace.nostr1.com,40.7128,-74.006 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +wot.sebastix.social,51.8933,4.42083 +nostr.satstralia.com,64.1476,-21.9392 +relay.illuminodes.com,47.6061,-122.333 +relay.letsfo.com,51.098,17.0321 +relay-dev.satlantis.io,40.8302,-74.1299 +mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 +relay.nostrhub.fr,48.1046,11.6002 +nostr.simplex.icu,50.8198,-1.08798 +wot.nostr.party,36.1627,-86.7816 +shu02.shugur.net,21.4902,39.2246 +nostr.casa21.space,40.7357,-74.1724 +schnorr.me,43.6532,-79.3832 +nostr.sathoarder.com,48.5734,7.75211 +nostr.lostr.space,43.6532,-79.3832 +relay.barine.co,40.7357,-74.1724 +nostr-relay.xbytez.io,50.6924,3.20113 +relay.javi.space,43.4633,11.8796 +nostr.smartflowsocial.com,40.7357,-74.1724 +bcast.seutoba.com.br,40.7357,-74.1724 +nostr.oxtr.dev,50.4754,12.3683 +nostr.n7ekb.net,47.4941,-122.294 +fanfares.nostr1.com,40.7057,-74.0136 +bcast.girino.org,43.6532,-79.3832 +nostr.vulpem.com,49.4543,11.0746 +shu05.shugur.net,48.8566,2.35222 +nostr-03.dorafactory.org,1.35208,103.82 +relay.artx.market,43.652,-79.3633 +relay.chorus.community,50.1109,8.68213 +nostream.breadslice.com,43.6532,-79.3832 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay.olas.app,50.4754,12.3683 +strfry.elswa-dev.online,48.8566,2.35222 +nostr-relay.amethyst.name,39.0438,-77.4874 +relay.nostr.vet,52.6467,4.7395 +relay02.lnfi.network,39.0997,-94.5786 +nos.xmark.cc,50.6924,3.20113 +nostr-01.uid.ovh,40.7357,-74.1724 +nostr.liberty.fans,36.9104,-89.5875 nostr.4rs.nl,49.0291,8.35696 -articles.layer3.news,37.3387,-121.885 +wheat.happytavern.co,40.7357,-74.1724 +fenrir-s.notoshi.win,40.7357,-74.1724 +relay.btcforplebs.com,43.6532,-79.3832 +nostr.now,36.55,139.733 +orangepiller.org,60.1699,24.9384 +relay.satlantis.io,32.8769,-80.0114 +relay.cypherflow.ai,48.8566,2.35222 +relay.orangepill.ovh,49.1689,-0.358841 +wot.brightbolt.net,47.6735,-116.781 +wot.tealeaf.dev,33.7488,-84.3877 +relay.wellorder.net,45.5201,-122.99 +ynostr.yael.at,60.1699,24.9384 +ribo.af.nostria.app,-26.2041,28.0473 +nostr.tadryanom.me,43.6532,-79.3832 +relay.jeffg.fyi,43.6532,-79.3832 +relay.bitcoinveneto.org,64.1466,-21.9426 +nostr.data.haus,50.4754,12.3683 +relay.varke.eu,52.6921,6.19372 +relay.artiostr.ch,40.7357,-74.1724 +relay.moinsen.com,50.4754,12.3683 +nostr.makibisskey.work,40.7357,-74.1724 +relay.snort.social,40.7357,-74.1724 +premium.primal.net,43.6532,-79.3832 +relay.getsafebox.app,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.lifpay.me,1.35208,103.82 +strfry.openhoofd.nl,51.9229,4.40833 +nostrcheck.tnsor.network,43.6532,-79.3832 +noxir.kpherox.dev,34.8587,135.509 +relay5.bitransfer.org,43.6532,-79.3832 +ribo.us.nostria.app,41.5868,-93.625 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.mostro.network,40.8302,-74.1299 +wot.nostr.net,40.7357,-74.1724 relay.nostriot.com,41.5695,-83.9786 -relay.endfiat.money,40.7128,-74.006 -relay.freeplace.nl,52.3676,4.90414 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr-relay.zimage.com,34.282,-118.439 -relay.cosmicbolt.net,37.3986,-121.964 -nostr.myshosholoza.co.za,52.3676,4.90414 -relay1.nostrchat.io,60.1699,24.9384 +nostr.mikoshi.de,50.1109,8.68213 +relay.mattybs.lol,40.7357,-74.1724 +relay.nostr.band,60.1699,24.9384 +strfry.shock.network,41.8959,-88.2169 +x.kojira.io,43.6532,-79.3832 +relay.etch.social,41.2619,-95.8608 +relay.lightning.pub,41.8959,-88.2169 +relay.damus.io,43.6532,-79.3832 +relay.degmods.com,50.4754,12.3683 +relay.nostrcheck.me,43.6532,-79.3832 +relay.credenso.cafe,43.3601,-80.3127 +shu01.shugur.net,21.4902,39.2246 +relay.ru.ac.th,13.7584,100.622 +relay.goodmorningbitcoin.com,40.7357,-74.1724 relay.bitcoindistrict.org,43.6532,-79.3832 -nostr.hekster.org,37.3986,-121.964 -relay2.ngengine.org,40.7357,-74.1724 -nostr-03.dorafactory.org,1.35208,103.82 -relay.cypherflow.ai,48.8566,2.35222 +black.nostrcity.club,41.8781,-87.6298 +nostr.jerrynya.fun,31.2304,121.474 +orangesync.tech,50.1109,8.68213 +nostr.blankfors.se,60.1699,24.9384 +relay.chatbett.de,28.0199,-82.5248 relay.siamdev.cc,13.8434,100.363 -nostr.rblb.it,43.4633,11.8796 -relay.nostriches.club,43.6532,-79.3832 -relay.nostr.net,50.4754,12.3683 -nostr.openhoofd.nl,51.9229,4.40833 +relay.seq1.net,40.7128,-74.006 +dizzyspells.nostr1.com,40.7057,-74.0136 +strfry.bonsai.com,37.8715,-122.273 +nostr.stakey.net,52.3676,4.90414 +ithurtswhenip.ee,51.223,6.78245 +relay.mccormick.cx,52.3563,4.95714 +alien.macneilmediagroup.com,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4543,11.0746 +relay.aloftus.io,34.0881,-118.379 nostr.girino.org,40.7357,-74.1724 -a.nos.lol,50.4754,12.3683 -relay.letsfo.com,51.098,17.0321 +nostr.einundzwanzig.space,50.1109,8.68213 +nostr.rikmeijer.nl,50.4754,12.3683 +relay2.angor.io,48.1046,11.6002 +nostr.zenon.network,43.5009,-70.4428 +relay.internationalright-wing.org,-22.5022,-48.7114 +relayb.uid.ovh,40.7357,-74.1724 +prl.plus,38.9072,-77.0369 +relay.ngengine.org,40.7357,-74.1724 +nostr.tac.lol,47.4748,-122.273 +nostr.88mph.life,43.6532,-79.3832 +relay.13room.space,40.7357,-74.1724 +relay.hasenpfeffr.com,39.0438,-77.4874 +nostr.zoracle.org,45.6018,-121.185 +nostr.luisschwab.net,40.7357,-74.1724 relay.electriclifestyle.com,26.2897,-80.1293 -wheat.happytavern.co,40.7357,-74.1724 -nostr.huszonegy.world,47.4979,19.0402 -relay.utxo.farm,35.6916,139.768 -nostr.sathoarder.com,48.5734,7.75211 -relay.sigit.io,50.4754,12.3683 -ynostr.yael.at,60.1699,24.9384 -nostr.plantroon.com,50.1013,8.62643 -nr.yay.so,46.2126,6.1154 +vitor.nostr1.com,40.7128,-74.006 +relay.origin.land,35.6673,139.751 +alienos.libretechsystems.xyz,55.4724,9.87335 +relay.fountain.fm,39.0997,-94.5786 +wot.dtonon.com,43.6532,-79.3832 +nostr.hifish.org,47.4043,8.57398 +ribo.eu.nostria.app,52.3676,4.90414 From cd02bc8dcf63f062cb1b7ce5f498dcba69bd2a01 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 26 Oct 2025 06:21:31 +0000 Subject: [PATCH 07/24] Automated update of relay data - Sun Oct 26 06:21:31 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 492 ++++++++++++++------------- 1 file changed, 249 insertions(+), 243 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index c6f201bb6..834060a27 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,271 +1,277 @@ Relay URL,Latitude,Longitude -slick.mjex.me,39.048,-77.4817 -relay.guggero.org,47.3769,8.54169 -nostr-relay.online,40.7357,-74.1724 -relay.bullishbounty.com,40.7357,-74.1724 -nostr.kalf.org,52.3676,4.90414 -relay.hook.cafe,40.7357,-74.1724 -nostrcheck.me,43.6532,-79.3832 -relay.vrtmrz.net,40.7357,-74.1724 -nostr.notribe.net,40.8302,-74.1299 +nostr-relay.amethyst.name,39.0438,-77.4874 +bcast.seutoba.com.br,43.6532,-79.3832 +premium.primal.net,40.7357,-74.1724 +strfry.openhoofd.nl,51.9229,4.40833 +relay.mostro.network,40.8302,-74.1299 +ribo.us.nostria.app,41.5868,-93.625 +relayone.geektank.ai,18.2148,-63.0574 +nostr.mikoshi.de,50.1109,8.68213 +relay.lifpay.me,1.35208,103.82 +shu02.shugur.net,21.4902,39.2246 +nostr.hifish.org,47.4043,8.57398 +orangepiller.org,60.1699,24.9384 +nostr.myshosholoza.co.za,52.3676,4.90414 +relay.nostrcheck.me,43.6532,-79.3832 +relay.nostrhub.tech,49.0291,8.35696 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +nostrcheck.me,40.7357,-74.1724 +relay.arx-ccn.com,50.4754,12.3683 +relay2.ngengine.org,43.6532,-79.3832 +nostr.21crypto.ch,47.4988,8.72369 +nostr.girino.org,43.6532,-79.3832 +relay.nostriches.club,43.6532,-79.3832 +relay.angor.io,48.1046,11.6002 +nostr.data.haus,50.4754,12.3683 +nostr.zoracle.org,45.6018,-121.185 +relay2.angor.io,48.1046,11.6002 +librerelay.aaroniumii.com,43.6532,-79.3832 +nostr.tadryanom.me,40.7357,-74.1724 +nostr-relay.cbrx.io,43.6532,-79.3832 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.aloftus.io,34.0881,-118.379 +relay.barine.co,43.6532,-79.3832 +nostr.red5d.dev,43.6532,-79.3832 nos.lol,50.4754,12.3683 -relay.notoshi.win,13.4166,101.335 -nostrelites.org,41.8781,-87.6298 -nostr-02.czas.top,53.471,9.88208 -relay.2nix.de,60.1699,24.9384 -nostr.faultables.net,43.6532,-79.3832 -nostr.noones.com,50.1109,8.68213 -relay.nostromo.social,49.4543,11.0746 -keys.nostr1.com,40.7057,-74.0136 -relay.toastr.net,40.8054,-74.0241 -nostr.spicyz.io,40.7357,-74.1724 +ithurtswhenip.ee,51.223,6.78245 +strfry.bonsai.com,37.8715,-122.273 +relay01.lnfi.network,39.0997,-94.5786 +nostrcheck.tnsor.network,43.6532,-79.3832 +x.kojira.io,43.6532,-79.3832 +nostr.snowbla.de,60.1699,24.9384 +purplerelay.com,50.1109,8.68213 +wot.sovbit.host,64.1466,-21.9426 shu04.shugur.net,25.2604,55.2989 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.freeplace.nl,52.3676,4.90414 -relay.wolfcoil.com,35.6092,139.73 -relay2.ngengine.org,43.6532,-79.3832 -nostr.davidebtc.me,50.1109,8.68213 -inbox.azzamo.net,52.2633,21.0283 -relay.arx-ccn.com,50.4754,12.3683 -nostr2.girino.org,43.6532,-79.3832 -nostr.camalolo.com,24.1469,120.684 -nostr.mom,50.4754,12.3683 -relayone.soundhsa.com,33.1384,-95.6011 -relay.zone667.com,60.1699,24.9384 nr.yay.so,46.2126,6.1154 -r.lostr.net,52.3676,4.90414 -zap.watch,45.5029,-73.5723 -relay.evanverma.com,40.8302,-74.1299 -nostr.sagaciousd.com,49.2827,-123.121 +nostr.smartflowsocial.com,43.6532,-79.3832 +shu05.shugur.net,48.8566,2.35222 +wot.dtonon.com,43.6532,-79.3832 +pyramid.fiatjaf.com,51.5072,-0.127586 +nostr.88mph.life,40.7357,-74.1724 dev-nostr.bityacht.io,25.0797,121.234 -relay.dwadziesciajeden.pl,52.2297,21.0122 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -nostr.night7.space,50.4754,12.3683 +cyberspace.nostr1.com,40.7128,-74.006 +relay.ngengine.org,40.7357,-74.1724 +nostr.calitabby.net,39.9268,-75.0246 +relay.toastr.net,40.8054,-74.0241 +relay.cosmicbolt.net,37.3986,-121.964 +nostr.davidebtc.me,50.1109,8.68213 +espelho.girino.org,43.6532,-79.3832 +srtrelay.c-stellar.net,40.7357,-74.1724 +relay.nostriot.com,41.5695,-83.9786 +relay.bitcoinveneto.org,64.1466,-21.9426 +bitcoiner.social,39.1585,-94.5728 +purpura.cloud,40.7357,-74.1724 +nostr.blankfors.se,60.1699,24.9384 +relay.nostromo.social,49.4543,11.0746 +ribo.af.nostria.app,-26.2041,28.0473 +relay.olas.app,50.4754,12.3683 +nostr.carroarmato0.be,50.9928,3.26317 +nostr.oxtr.dev,50.4754,12.3683 +relay.upleb.uk,52.2297,21.0122 +nostr.stakey.net,52.3676,4.90414 +nostr2.girino.org,40.7357,-74.1724 +nostr.rikmeijer.nl,50.4754,12.3683 +relay5.bitransfer.org,40.7357,-74.1724 +relay.mattybs.lol,40.7357,-74.1724 +nostr.makibisskey.work,40.7357,-74.1724 wot.basspistol.org,49.4521,11.0767 -nostr.hekster.org,37.3986,-121.964 -relay.lumina.rocks,49.0291,8.35695 -offchain.pub,36.1809,-115.241 -satsage.xyz,37.3986,-121.964 -nostr.openhoofd.nl,51.9229,4.40833 -nostrelay.memory-art.xyz,43.6532,-79.3832 -nostr-02.yakihonne.com,1.32123,103.695 -yabu.me,35.6092,139.73 -relay.magiccity.live,25.8128,-80.2377 +relay.nostr.net,50.4754,12.3683 +a.nos.lol,50.4754,12.3683 +wot.dergigi.com,64.1476,-21.9392 +fanfares.nostr1.com,40.7057,-74.0136 +nostr.faultables.net,43.6532,-79.3832 +relay.dwadziesciajeden.pl,52.2297,21.0122 +adre.su,59.9311,30.3609 +wot.nostr.party,36.1627,-86.7816 +relay03.lnfi.network,39.0997,-94.5786 +relay.orangepill.ovh,49.1689,-0.358841 +gnostr.com,42.6978,23.3246 +relay.wellorder.net,45.5201,-122.99 +relay.21e6.cz,50.1682,14.0546 +relay.tagayasu.xyz,43.6715,-79.38 +relay.chatbett.de,28.0199,-82.5248 wot.soundhsa.com,33.1384,-95.6011 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.upleb.uk,52.2297,21.0122 -soloco.nl,40.7357,-74.1724 -nostr.plantroon.com,50.1013,8.62643 -relay.angor.io,48.1046,11.6002 -relay.sigit.io,50.4754,12.3683 -khatru.nostrver.se,51.8933,4.42083 -nostrelay.circum.space,51.2217,6.77616 +prl.plus,38.9072,-77.0369 +nostr.einundzwanzig.space,50.1109,8.68213 +nostream.breadslice.com,1.35208,103.82 +relay.chorus.community,50.1109,8.68213 +nostr.mom,50.4754,12.3683 +relay.lightning.pub,41.8959,-88.2169 +relay.hook.cafe,40.7357,-74.1724 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +relay.fundstr.me,42.3601,-71.0589 +relay.stream.labs.h3.se,59.4016,17.9455 +relay.holzeis.me,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 nproxy.kristapsk.lv,60.1699,24.9384 -nostr.chaima.info,51.223,6.78245 -nostr.bilthon.dev,25.8128,-80.2377 -nostr.azzamo.net,52.2633,21.0283 -relay.fr13nd5.com,52.5233,13.3426 -nostr.agentcampfire.com,50.8933,6.05805 -relay.uid.ovh,43.6532,-79.3832 -nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 -wot.sovbit.host,64.1466,-21.9426 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.tagayasu.xyz,43.6715,-79.38 +nostr.thebiglake.org,32.71,-96.6745 +relay.coinos.io,40.7357,-74.1724 +nostr.camalolo.com,24.1469,120.684 +theoutpost.life,64.1476,-21.9392 +relay.nostraddress.com,40.7357,-74.1724 +nostr.casa21.space,40.7357,-74.1724 +relay.agorist.space,52.3734,4.89406 relay.nostr.wirednet.jp,34.706,135.493 -wot.nostr.place,30.2672,-97.7431 -relay.libernet.app,43.6532,-79.3832 -purpura.cloud,43.6532,-79.3832 -adre.su,59.9311,30.3609 -strfry.felixzieger.de,50.1013,8.62643 +nostr.jerrynya.fun,31.2304,121.474 +relay.13room.space,43.6532,-79.3832 +offchain.pub,47.6743,-117.112 +relay.hasenpfeffr.com,39.0438,-77.4874 nostr-verified.wellorder.net,45.5201,-122.99 -relay.islandbitcoin.com,12.8498,77.6545 -gnostr.com,42.6978,23.3246 -relay.davidebtc.me,50.1109,8.68213 -freelay.sovbit.host,64.1476,-21.9392 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.red5d.dev,43.6532,-79.3832 -relay.nostriches.club,43.6532,-79.3832 -relay.basspistol.org,46.2044,6.14316 -relay.ditto.pub,43.6532,-79.3832 +nostrelay.memory-art.xyz,43.6532,-79.3832 +freeben666.fr,43.1204,6.12857 +nostr.bilthon.dev,25.8128,-80.2377 +nostr.spicyz.io,40.7357,-74.1724 +bcast.girino.org,40.7357,-74.1724 +nostr.noones.com,50.1109,8.68213 +relay.electriclifestyle.com,26.2897,-80.1293 +relay.guggero.org,47.3769,8.54169 +relay.siamdev.cc,13.8434,100.363 +relay.varke.eu,52.6921,6.19372 +nostr.now,36.55,139.733 +relay.origin.land,35.6673,139.751 +yabu.me,35.6092,139.73 +nostr-02.yakihonne.com,1.32123,103.695 +nostr.tac.lol,47.4748,-122.273 +r.bitcoinhold.net,40.7357,-74.1724 nostr.rtvslawenia.com,49.4543,11.0746 -relay.stream.labs.h3.se,59.4016,17.9455 -a.nos.lol,50.4754,12.3683 -relay.nostraddress.com,40.7357,-74.1724 -dev-relay.lnfi.network,39.0997,-94.5786 -relay.cosmicbolt.net,37.3986,-121.964 -relay03.lnfi.network,39.0997,-94.5786 -relay04.lnfi.network,39.0997,-94.5786 -nostr.snowbla.de,60.1699,24.9384 -santo.iguanatech.net,40.8302,-74.1299 -nostr.myshosholoza.co.za,52.3676,4.90414 -nostr-01.yakihonne.com,1.32123,103.695 -relay.usefusion.ai,38.7134,-78.1591 -relay.nostr.place,32.7767,-96.797 +relay.sigit.io,50.4754,12.3683 +nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 relay.bitcoinartclock.com,50.4754,12.3683 +relay.snort.social,40.7357,-74.1724 +relay.mwaters.net,50.9871,2.12554 +nostr-03.dorafactory.org,1.35208,103.82 +relay.damus.io,40.7357,-74.1724 +black.nostrcity.club,41.8781,-87.6298 +noxir.kpherox.dev,34.8587,135.509 +relay.javi.space,43.4633,11.8796 +fenrir-s.notoshi.win,43.6532,-79.3832 +relay02.lnfi.network,39.0997,-94.5786 +mhp258zrpiiwn.clorecloud.net,40.7357,-74.1724 +relay.libernet.app,43.6532,-79.3832 nostr.coincards.com,53.5501,-113.469 -relay.coinos.io,40.7357,-74.1724 -relay01.lnfi.network,39.0997,-94.5786 +ynostr.yael.at,60.1699,24.9384 +slick.mjex.me,39.048,-77.4817 +nostr.agentcampfire.com,50.8933,6.05805 +nostr-pub.wellorder.net,45.5201,-122.99 +relay.artiostr.ch,43.6532,-79.3832 +relay.davidebtc.me,50.1109,8.68213 +shu01.shugur.net,21.4902,39.2246 +relay.nostr.band,60.1699,24.9384 +relay.evanverma.com,40.8302,-74.1299 +nostr.simplex.icu,50.8198,-1.08798 +wot.nostr.net,43.6532,-79.3832 +relay.nostr.vet,52.6467,4.7395 +r.lostr.net,52.3676,4.90414 +relay.getsafebox.app,43.6532,-79.3832 +relay.moinsen.com,50.4754,12.3683 +nostr.luisschwab.net,43.6532,-79.3832 +strfry.elswa-dev.online,48.8566,2.35222 +alienos.libretechsystems.xyz,55.4724,9.87335 +nostr.overmind.lol,40.7357,-74.1724 +nos.xmark.cc,50.6924,3.20113 +relay.degmods.com,50.4754,12.3683 +relay.seq1.net,40.7128,-74.006 +relay.uid.ovh,43.6532,-79.3832 +santo.iguanatech.net,40.8302,-74.1299 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.hekster.org,37.3986,-121.964 +wheat.happytavern.co,43.6532,-79.3832 +nostr-02.czas.top,53.471,9.88208 +satsage.xyz,37.3986,-121.964 no.str.cr,9.92857,-84.0528 -relay.holzeis.me,43.6532,-79.3832 -relay.agora.social,50.7383,15.0648 -theoutpost.life,64.1476,-21.9392 -articles.layer3.news,37.3387,-121.885 -relay.primal.net,40.7357,-74.1724 -nostr-2.21crypto.ch,47.4988,8.72369 relay.puresignal.news,40.7357,-74.1724 -pyramid.fiatjaf.com,51.5072,-0.127586 -relay.wavlake.com,41.2619,-95.8608 -nostr.0x7e.xyz,47.4988,8.72369 -relay.21e6.cz,50.1682,14.0546 -nostr-relay.zimage.com,34.282,-118.439 -relay.fundstr.me,42.3601,-71.0589 -temp.iris.to,43.6532,-79.3832 +nostr-relay.nextblockvending.com,47.2343,-119.853 +keys.nostr1.com,40.7057,-74.0136 +relayone.soundhsa.com,33.1384,-95.6011 nostr-dev.wellorder.net,45.5201,-122.99 -relay.agorist.space,52.3734,4.89406 -relay.mwaters.net,50.9871,2.12554 -wot.utxo.one,40.7128,-74.006 +alien.macneilmediagroup.com,40.7357,-74.1724 +nostr.kalf.org,52.3676,4.90414 +nostrelites.org,41.8781,-87.6298 +temp.iris.to,43.6532,-79.3832 relay.utxo.farm,35.6916,139.768 -relayrs.notoshi.win,43.6532,-79.3832 -r.bitcoinhold.net,43.6532,-79.3832 -nostr.huszonegy.world,47.4979,19.0402 +freelay.sovbit.host,64.1476,-21.9392 relay.nosto.re,51.8933,4.42083 +inbox.azzamo.net,52.2633,21.0283 +nostr.ovia.to,43.6532,-79.3832 +nostr.lostr.space,40.7357,-74.1724 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.nostar.org,40.7357,-74.1724 +relay.mccormick.cx,52.3563,4.95714 +nostr.0x7e.xyz,47.4988,8.72369 relay.0xchat.com,1.35208,103.82 -relay.nostrhub.tech,49.0291,8.35696 -purplerelay.com,50.1109,8.68213 -nostr.namek.link,40.7357,-74.1724 -nostr.thebiglake.org,32.71,-96.6745 +relay.thebluepulse.com,40.7357,-74.1724 +relay.letsfo.com,51.098,17.0321 +nostrelay.circum.space,52.3676,4.90414 nostr-relay.psfoundation.info,39.0438,-77.4874 -wot.dergigi.com,64.1476,-21.9392 -nostr.carroarmato0.be,50.9928,3.26317 -nostr.21crypto.ch,47.4988,8.72369 -relay.nostr.net,50.4754,12.3683 -cyberspace.nostr1.com,40.7128,-74.006 -srtrelay.c-stellar.net,43.6532,-79.3832 +strfry.shock.network,41.8959,-88.2169 +nostr-2.21crypto.ch,47.4988,8.72369 +relay1.nostrchat.io,60.1699,24.9384 +nostr.plantroon.com,50.1013,8.62643 +relay.artx.market,43.652,-79.3633 +nostr.chaima.info,51.223,6.78245 +wot.nostr.place,30.2672,-97.7431 +nostr.rblb.it,43.4633,11.8796 +relay.magiccity.live,25.8128,-80.2377 +soloco.nl,40.7357,-74.1724 +dizzyspells.nostr1.com,40.7128,-74.006 +relay.zone667.com,60.1699,24.9384 +nostr-01.uid.ovh,43.6532,-79.3832 +zap.watch,45.5029,-73.5723 +relay.wolfcoil.com,35.6092,139.73 relay.nostrdice.com,-33.8688,151.209 -wot.sebastix.social,51.8933,4.42083 -nostr.satstralia.com,64.1476,-21.9392 -relay.illuminodes.com,47.6061,-122.333 -relay.letsfo.com,51.098,17.0321 -relay-dev.satlantis.io,40.8302,-74.1299 -mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 -relay.nostrhub.fr,48.1046,11.6002 -nostr.simplex.icu,50.8198,-1.08798 -wot.nostr.party,36.1627,-86.7816 -shu02.shugur.net,21.4902,39.2246 -nostr.casa21.space,40.7357,-74.1724 -schnorr.me,43.6532,-79.3832 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +relay.btcforplebs.com,40.7357,-74.1724 nostr.sathoarder.com,48.5734,7.75211 -nostr.lostr.space,43.6532,-79.3832 -relay.barine.co,40.7357,-74.1724 -nostr-relay.xbytez.io,50.6924,3.20113 -relay.javi.space,43.4633,11.8796 -nostr.smartflowsocial.com,40.7357,-74.1724 -bcast.seutoba.com.br,40.7357,-74.1724 -nostr.oxtr.dev,50.4754,12.3683 -nostr.n7ekb.net,47.4941,-122.294 -fanfares.nostr1.com,40.7057,-74.0136 -bcast.girino.org,43.6532,-79.3832 +nostr.azzamo.net,52.2633,21.0283 +wot.utxo.one,40.7128,-74.006 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.lumina.rocks,49.0291,8.35695 +relay.primal.net,43.6532,-79.3832 +nostr.notribe.net,40.8302,-74.1299 +relay.usefusion.ai,38.7134,-78.1591 +relay-dev.satlantis.io,40.8302,-74.1299 nostr.vulpem.com,49.4543,11.0746 -shu05.shugur.net,48.8566,2.35222 -nostr-03.dorafactory.org,1.35208,103.82 -relay.artx.market,43.652,-79.3633 -relay.chorus.community,50.1109,8.68213 -nostream.breadslice.com,43.6532,-79.3832 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay.olas.app,50.4754,12.3683 -strfry.elswa-dev.online,48.8566,2.35222 -nostr-relay.amethyst.name,39.0438,-77.4874 -relay.nostr.vet,52.6467,4.7395 -relay02.lnfi.network,39.0997,-94.5786 -nos.xmark.cc,50.6924,3.20113 -nostr-01.uid.ovh,40.7357,-74.1724 -nostr.liberty.fans,36.9104,-89.5875 -nostr.4rs.nl,49.0291,8.35696 -wheat.happytavern.co,40.7357,-74.1724 -fenrir-s.notoshi.win,40.7357,-74.1724 -relay.btcforplebs.com,43.6532,-79.3832 -nostr.now,36.55,139.733 -orangepiller.org,60.1699,24.9384 -relay.satlantis.io,32.8769,-80.0114 +orangesync.tech,50.1109,8.68213 +relay.fountain.fm,39.0997,-94.5786 relay.cypherflow.ai,48.8566,2.35222 -relay.orangepill.ovh,49.1689,-0.358841 -wot.brightbolt.net,47.6735,-116.781 -wot.tealeaf.dev,33.7488,-84.3877 -relay.wellorder.net,45.5201,-122.99 -ynostr.yael.at,60.1699,24.9384 -ribo.af.nostria.app,-26.2041,28.0473 -nostr.tadryanom.me,43.6532,-79.3832 +nostr-relay.online,40.7357,-74.1724 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.nostr.place,32.7767,-96.797 +relay.npubhaus.com,40.7357,-74.1724 relay.jeffg.fyi,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 -nostr.data.haus,50.4754,12.3683 -relay.varke.eu,52.6921,6.19372 -relay.artiostr.ch,40.7357,-74.1724 -relay.moinsen.com,50.4754,12.3683 -nostr.makibisskey.work,40.7357,-74.1724 -relay.snort.social,40.7357,-74.1724 -premium.primal.net,43.6532,-79.3832 -relay.getsafebox.app,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.lifpay.me,1.35208,103.82 -strfry.openhoofd.nl,51.9229,4.40833 -nostrcheck.tnsor.network,43.6532,-79.3832 -noxir.kpherox.dev,34.8587,135.509 -relay5.bitransfer.org,43.6532,-79.3832 -ribo.us.nostria.app,41.5868,-93.625 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.mostro.network,40.8302,-74.1299 -wot.nostr.net,40.7357,-74.1724 -relay.nostriot.com,41.5695,-83.9786 -nostr.mikoshi.de,50.1109,8.68213 -relay.mattybs.lol,40.7357,-74.1724 -relay.nostr.band,60.1699,24.9384 -strfry.shock.network,41.8959,-88.2169 -x.kojira.io,43.6532,-79.3832 +nostr.night7.space,50.4754,12.3683 +nostr.4rs.nl,49.0291,8.35696 +nostr.liberty.fans,36.9104,-89.5875 +ribo.eu.nostria.app,52.3676,4.90414 +nostr.bitcoiner.social,39.1585,-94.5728 +relay.basspistol.org,46.2044,6.14316 +dev-relay.lnfi.network,39.0997,-94.5786 +nostr.openhoofd.nl,51.9229,4.40833 +nostr.huszonegy.world,47.4979,19.0402 +relay.2nix.de,60.1699,24.9384 +vitor.nostr1.com,40.7057,-74.0136 +nostr.zenon.network,43.5009,-70.4428 relay.etch.social,41.2619,-95.8608 -relay.lightning.pub,41.8959,-88.2169 -relay.damus.io,43.6532,-79.3832 -relay.degmods.com,50.4754,12.3683 -relay.nostrcheck.me,43.6532,-79.3832 +relay.fr13nd5.com,52.5233,13.3426 +relay.agora.social,50.7383,15.0648 relay.credenso.cafe,43.3601,-80.3127 -shu01.shugur.net,21.4902,39.2246 -relay.ru.ac.th,13.7584,100.622 -relay.goodmorningbitcoin.com,40.7357,-74.1724 -relay.bitcoindistrict.org,43.6532,-79.3832 -black.nostrcity.club,41.8781,-87.6298 -nostr.jerrynya.fun,31.2304,121.474 -orangesync.tech,50.1109,8.68213 -nostr.blankfors.se,60.1699,24.9384 -relay.chatbett.de,28.0199,-82.5248 -relay.siamdev.cc,13.8434,100.363 -relay.seq1.net,40.7128,-74.006 -dizzyspells.nostr1.com,40.7057,-74.0136 -strfry.bonsai.com,37.8715,-122.273 -nostr.stakey.net,52.3676,4.90414 -ithurtswhenip.ee,51.223,6.78245 -relay.mccormick.cx,52.3563,4.95714 -alien.macneilmediagroup.com,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +relay.freeplace.nl,52.3676,4.90414 relay-rpi.edufeed.org,49.4543,11.0746 -relay.aloftus.io,34.0881,-118.379 -nostr.girino.org,40.7357,-74.1724 -nostr.einundzwanzig.space,50.1109,8.68213 -nostr.rikmeijer.nl,50.4754,12.3683 -relay2.angor.io,48.1046,11.6002 -nostr.zenon.network,43.5009,-70.4428 -relay.internationalright-wing.org,-22.5022,-48.7114 -relayb.uid.ovh,40.7357,-74.1724 -prl.plus,38.9072,-77.0369 -relay.ngengine.org,40.7357,-74.1724 -nostr.tac.lol,47.4748,-122.273 -nostr.88mph.life,43.6532,-79.3832 -relay.13room.space,40.7357,-74.1724 -relay.hasenpfeffr.com,39.0438,-77.4874 -nostr.zoracle.org,45.6018,-121.185 -nostr.luisschwab.net,40.7357,-74.1724 -relay.electriclifestyle.com,26.2897,-80.1293 -vitor.nostr1.com,40.7128,-74.006 -relay.origin.land,35.6673,139.751 -alienos.libretechsystems.xyz,55.4724,9.87335 -relay.fountain.fm,39.0997,-94.5786 -wot.dtonon.com,43.6532,-79.3832 -nostr.hifish.org,47.4043,8.57398 -ribo.eu.nostria.app,52.3676,4.90414 +relay.bullishbounty.com,43.6532,-79.3832 +relay04.lnfi.network,39.0997,-94.5786 +nostr-01.yakihonne.com,1.32123,103.695 +nostr-relay.xbytez.io,50.6924,3.20113 +wot.sebastix.social,51.8933,4.42083 +strfry.felixzieger.de,50.1013,8.62643 +nostr.n7ekb.net,47.4941,-122.294 +khatru.nostrver.se,51.8933,4.42083 +relayrs.notoshi.win,40.7357,-74.1724 +relay.wavlake.com,41.2619,-95.8608 +wot.sudocarlos.com,51.5072,-0.127586 +nostr.sagaciousd.com,49.2827,-123.121 +relay.islandbitcoin.com,12.8498,77.6545 +trizone.dev,1.35208,103.82 +schnorr.me,40.7357,-74.1724 +relay.vrtmrz.net,40.7357,-74.1724 +relay.ditto.pub,43.6532,-79.3832 From 4b84db0b1803f2b31ee46de306a71f79fa3d644e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 2 Nov 2025 06:22:16 +0000 Subject: [PATCH 08/24] Automated update of relay data - Sun Nov 2 06:22:16 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 505 ++++++++++++++------------- 1 file changed, 257 insertions(+), 248 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 834060a27..5d6733086 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,277 +1,286 @@ Relay URL,Latitude,Longitude -nostr-relay.amethyst.name,39.0438,-77.4874 -bcast.seutoba.com.br,43.6532,-79.3832 -premium.primal.net,40.7357,-74.1724 -strfry.openhoofd.nl,51.9229,4.40833 +nostrelay.memory-art.xyz,40.7128,-74.006 +nos.lol,50.4754,12.3683 +srtrelay.c-stellar.net,40.7357,-74.1724 +nostr.agentcampfire.com,50.8933,6.05805 +wot.basspistol.org,49.4521,11.0767 relay.mostro.network,40.8302,-74.1299 -ribo.us.nostria.app,41.5868,-93.625 -relayone.geektank.ai,18.2148,-63.0574 -nostr.mikoshi.de,50.1109,8.68213 -relay.lifpay.me,1.35208,103.82 -shu02.shugur.net,21.4902,39.2246 -nostr.hifish.org,47.4043,8.57398 -orangepiller.org,60.1699,24.9384 -nostr.myshosholoza.co.za,52.3676,4.90414 -relay.nostrcheck.me,43.6532,-79.3832 -relay.nostrhub.tech,49.0291,8.35696 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -nostrcheck.me,40.7357,-74.1724 -relay.arx-ccn.com,50.4754,12.3683 -relay2.ngengine.org,43.6532,-79.3832 -nostr.21crypto.ch,47.4988,8.72369 -nostr.girino.org,43.6532,-79.3832 -relay.nostriches.club,43.6532,-79.3832 -relay.angor.io,48.1046,11.6002 -nostr.data.haus,50.4754,12.3683 -nostr.zoracle.org,45.6018,-121.185 -relay2.angor.io,48.1046,11.6002 -librerelay.aaroniumii.com,43.6532,-79.3832 -nostr.tadryanom.me,40.7357,-74.1724 -nostr-relay.cbrx.io,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.aloftus.io,34.0881,-118.379 +relay.nsnip.io,60.1699,24.9384 +nostr-relay.xbytez.io,50.6924,3.20113 +nostr.sagaciousd.com,49.2827,-123.121 relay.barine.co,43.6532,-79.3832 -nostr.red5d.dev,43.6532,-79.3832 -nos.lol,50.4754,12.3683 -ithurtswhenip.ee,51.223,6.78245 +relay.thebluepulse.com,49.0291,8.35696 strfry.bonsai.com,37.8715,-122.273 -relay01.lnfi.network,39.0997,-94.5786 -nostrcheck.tnsor.network,43.6532,-79.3832 -x.kojira.io,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -purplerelay.com,50.1109,8.68213 +nostr.n7ekb.net,47.4941,-122.294 +relay.lightning.pub,41.8959,-88.2169 +relay.nosto.re,51.8933,4.42083 wot.sovbit.host,64.1466,-21.9426 -shu04.shugur.net,25.2604,55.2989 -nr.yay.so,46.2126,6.1154 -nostr.smartflowsocial.com,43.6532,-79.3832 -shu05.shugur.net,48.8566,2.35222 -wot.dtonon.com,43.6532,-79.3832 -pyramid.fiatjaf.com,51.5072,-0.127586 -nostr.88mph.life,40.7357,-74.1724 -dev-nostr.bityacht.io,25.0797,121.234 -cyberspace.nostr1.com,40.7128,-74.006 -relay.ngengine.org,40.7357,-74.1724 -nostr.calitabby.net,39.9268,-75.0246 -relay.toastr.net,40.8054,-74.0241 -relay.cosmicbolt.net,37.3986,-121.964 -nostr.davidebtc.me,50.1109,8.68213 -espelho.girino.org,43.6532,-79.3832 -srtrelay.c-stellar.net,40.7357,-74.1724 -relay.nostriot.com,41.5695,-83.9786 -relay.bitcoinveneto.org,64.1466,-21.9426 -bitcoiner.social,39.1585,-94.5728 -purpura.cloud,40.7357,-74.1724 -nostr.blankfors.se,60.1699,24.9384 -relay.nostromo.social,49.4543,11.0746 -ribo.af.nostria.app,-26.2041,28.0473 +nostr.einundzwanzig.space,50.1109,8.68213 +shu01.shugur.net,21.4902,39.2246 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +nproxy.kristapsk.lv,60.1699,24.9384 +soloco.nl,40.7357,-74.1724 +nostr.coincrowd.fund,39.0438,-77.4874 +zap.watch,45.5029,-73.5723 relay.olas.app,50.4754,12.3683 +bcast.girino.org,40.7357,-74.1724 +theoutpost.life,64.1476,-21.9392 +r.bitcoinhold.net,43.6532,-79.3832 +relay.2nix.de,60.1699,24.9384 +relay.btcforplebs.com,40.7357,-74.1724 nostr.carroarmato0.be,50.9928,3.26317 -nostr.oxtr.dev,50.4754,12.3683 -relay.upleb.uk,52.2297,21.0122 -nostr.stakey.net,52.3676,4.90414 -nostr2.girino.org,40.7357,-74.1724 -nostr.rikmeijer.nl,50.4754,12.3683 -relay5.bitransfer.org,40.7357,-74.1724 -relay.mattybs.lol,40.7357,-74.1724 -nostr.makibisskey.work,40.7357,-74.1724 -wot.basspistol.org,49.4521,11.0767 -relay.nostr.net,50.4754,12.3683 -a.nos.lol,50.4754,12.3683 -wot.dergigi.com,64.1476,-21.9392 -fanfares.nostr1.com,40.7057,-74.0136 -nostr.faultables.net,43.6532,-79.3832 -relay.dwadziesciajeden.pl,52.2297,21.0122 +relay.nostriches.club,43.6532,-79.3832 +yabu.me,35.6092,139.73 +bcast.seutoba.com.br,43.6532,-79.3832 adre.su,59.9311,30.3609 -wot.nostr.party,36.1627,-86.7816 -relay03.lnfi.network,39.0997,-94.5786 -relay.orangepill.ovh,49.1689,-0.358841 -gnostr.com,42.6978,23.3246 +shu05.shugur.net,48.8566,2.35222 +nostr.data.haus,50.4754,12.3683 +relay.ru.ac.th,13.7584,100.622 +nostrcheck.tnsor.network,43.6532,-79.3832 +relay.angor.io,48.1046,11.6002 +wot.brightbolt.net,47.6735,-116.781 +nostr.sathoarder.com,48.5734,7.75211 +shu02.shugur.net,21.4902,39.2246 +relay.nostriot.com,41.5695,-83.9786 +relay.nostar.org,40.7357,-74.1724 +relay.mccormick.cx,52.3563,4.95714 +relay.nostraddress.com,40.7357,-74.1724 +nostr.spicyz.io,40.7357,-74.1724 +nostream.breadslice.com,1.35208,103.82 +wot.nostr.net,40.7357,-74.1724 +nostr-2.21crypto.ch,47.4988,8.72369 +wot.nostr.place,30.2672,-97.7431 +nostr.night7.space,50.4754,12.3683 +nostr2.girino.org,43.6532,-79.3832 +nostr.21crypto.ch,47.4988,8.72369 +relay.ditto.pub,43.6532,-79.3832 +relay02.lnfi.network,39.0997,-94.5786 +relay.degmods.com,50.4754,12.3683 +nostr.chaima.info,51.223,6.78245 +relayrs.notoshi.win,43.6532,-79.3832 +nostr.openhoofd.nl,51.9229,4.40833 relay.wellorder.net,45.5201,-122.99 -relay.21e6.cz,50.1682,14.0546 +relayone.geektank.ai,18.2148,-63.0574 +wot.dtonon.com,43.6532,-79.3832 +relay.hook.cafe,43.6532,-79.3832 relay.tagayasu.xyz,43.6715,-79.38 -relay.chatbett.de,28.0199,-82.5248 -wot.soundhsa.com,33.1384,-95.6011 -prl.plus,38.9072,-77.0369 -nostr.einundzwanzig.space,50.1109,8.68213 -nostream.breadslice.com,1.35208,103.82 -relay.chorus.community,50.1109,8.68213 -nostr.mom,50.4754,12.3683 -relay.lightning.pub,41.8959,-88.2169 -relay.hook.cafe,40.7357,-74.1724 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.fundstr.me,42.3601,-71.0589 -relay.stream.labs.h3.se,59.4016,17.9455 -relay.holzeis.me,43.6532,-79.3832 -articles.layer3.news,37.3387,-121.885 -nproxy.kristapsk.lv,60.1699,24.9384 -nostr.thebiglake.org,32.71,-96.6745 -relay.coinos.io,40.7357,-74.1724 -nostr.camalolo.com,24.1469,120.684 -theoutpost.life,64.1476,-21.9392 -relay.nostraddress.com,40.7357,-74.1724 -nostr.casa21.space,40.7357,-74.1724 +ynostr.yael.at,60.1699,24.9384 +relay.uid.ovh,40.7357,-74.1724 +nostr.girino.org,43.6532,-79.3832 +relayone.soundhsa.com,33.1384,-95.6011 +relay2.angor.io,48.1046,11.6002 +nostr.stakey.net,52.3676,4.90414 relay.agorist.space,52.3734,4.89406 -relay.nostr.wirednet.jp,34.706,135.493 -nostr.jerrynya.fun,31.2304,121.474 -relay.13room.space,43.6532,-79.3832 -offchain.pub,47.6743,-117.112 -relay.hasenpfeffr.com,39.0438,-77.4874 -nostr-verified.wellorder.net,45.5201,-122.99 -nostrelay.memory-art.xyz,43.6532,-79.3832 -freeben666.fr,43.1204,6.12857 +alienos.libretechsystems.xyz,55.4724,9.87335 +nostr.hifish.org,47.4043,8.57398 +nostr.hole.cafe,60.1699,24.9384 +x.kojira.io,40.7357,-74.1724 +nostr.zoracle.org,45.6018,-121.185 +relay.getsafebox.app,43.6532,-79.3832 +nostr.simplex.icu,50.8198,-1.08798 +relay.basspistol.org,46.2044,6.14316 +relay.davidebtc.me,50.1109,8.68213 +nostr.tadryanom.me,43.6532,-79.3832 +relay.nostrhub.tech,49.0291,8.35696 nostr.bilthon.dev,25.8128,-80.2377 -nostr.spicyz.io,40.7357,-74.1724 -bcast.girino.org,40.7357,-74.1724 -nostr.noones.com,50.1109,8.68213 -relay.electriclifestyle.com,26.2897,-80.1293 -relay.guggero.org,47.3769,8.54169 +nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 +nostr.huszonegy.world,47.4979,19.0402 +bitcoiner.social,39.1585,-94.5728 +nostr-02.yakihonne.com,1.32123,103.695 +vitor.nostr1.com,40.7128,-74.006 +relay.wavlake.com,41.2619,-95.8608 +librerelay.aaroniumii.com,40.7357,-74.1724 +gnostr.com,42.6978,23.3246 +relay.nostrdice.com,-33.8688,151.209 +nostr-dev.wellorder.net,45.5201,-122.99 +strfry.felixzieger.de,50.1013,8.62643 +relay.ngengine.org,43.6532,-79.3832 +relay.wolfcoil.com,35.6092,139.73 +relay.coinos.io,40.7357,-74.1724 +relay.13room.space,40.7357,-74.1724 relay.siamdev.cc,13.8434,100.363 -relay.varke.eu,52.6921,6.19372 +relay.bitcoinveneto.org,64.1466,-21.9426 +fenrir-s.notoshi.win,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 +slick.mjex.me,39.048,-77.4817 +nostr.camalolo.com,24.1469,120.684 +nostr.88mph.life,43.6532,-79.3832 +nostrelay.circum.space,52.3676,4.90414 +relay.dwadziesciajeden.pl,52.2297,21.0122 +nostr.luisschwab.net,43.6532,-79.3832 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +strfry.openhoofd.nl,51.9229,4.40833 +noxir.kpherox.dev,34.8587,135.509 +relay.nostr.band,60.1699,24.9384 +r.lostr.net,52.3676,4.90414 nostr.now,36.55,139.733 -relay.origin.land,35.6673,139.751 -yabu.me,35.6092,139.73 -nostr-02.yakihonne.com,1.32123,103.695 -nostr.tac.lol,47.4748,-122.273 -r.bitcoinhold.net,40.7357,-74.1724 -nostr.rtvslawenia.com,49.4543,11.0746 +relay.endfiat.money,40.7128,-74.006 +offchain.pub,47.6743,-117.112 +nostr.kalf.org,52.3676,4.90414 +wot.dergigi.com,64.1476,-21.9392 +relay.hasenpfeffr.com,39.0438,-77.4874 +relayb.uid.ovh,43.6532,-79.3832 +relay.bitcoindistrict.org,40.7357,-74.1724 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostr-relay.online,40.7357,-74.1724 +relay.credenso.cafe,43.3601,-80.3127 +trizone.dev,1.35208,103.82 +relay.nostr.net,50.4754,12.3683 +nostr-02.czas.top,53.471,9.88208 relay.sigit.io,50.4754,12.3683 -nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 -relay.bitcoinartclock.com,50.4754,12.3683 -relay.snort.social,40.7357,-74.1724 -relay.mwaters.net,50.9871,2.12554 -nostr-03.dorafactory.org,1.35208,103.82 -relay.damus.io,40.7357,-74.1724 -black.nostrcity.club,41.8781,-87.6298 -noxir.kpherox.dev,34.8587,135.509 +relay.nostr.vet,52.6467,4.7395 +relay.vrtmrz.net,40.7357,-74.1724 +khatru.nostrver.se,51.8933,4.42083 +relay.illuminodes.com,47.6061,-122.333 +relay01.lnfi.network,39.0997,-94.5786 relay.javi.space,43.4633,11.8796 -fenrir-s.notoshi.win,43.6532,-79.3832 -relay02.lnfi.network,39.0997,-94.5786 -mhp258zrpiiwn.clorecloud.net,40.7357,-74.1724 +nostrelites.org,41.8781,-87.6298 +relay.chorus.community,50.1109,8.68213 +relay.wavefunc.live,34.0362,-118.443 +shu04.shugur.net,25.2604,55.2989 +dev-relay.lnfi.network,39.0997,-94.5786 +relay.jeffg.fyi,43.6532,-79.3832 +nostr.davidebtc.me,50.1109,8.68213 +relay.fr13nd5.com,52.5233,13.3426 +wot.tealeaf.dev,33.7488,-84.3877 +relay.bullishbounty.com,40.7357,-74.1724 +nostr.mikoshi.de,52.52,13.405 +relay-dev.satlantis.io,40.8302,-74.1299 +promo.nextblock.app,40.7357,-74.1724 +nostr.jerrynya.fun,31.2304,121.474 +nostr.oxtr.dev,50.4754,12.3683 +relay-rpi.edufeed.org,49.4543,11.0746 +relay.origin.land,35.6673,139.751 +relay.aloftus.io,34.0881,-118.379 +relay.nostr.place,32.7767,-96.797 +relay.cosmicbolt.net,37.3986,-121.964 +relay.21e6.cz,50.1682,14.0546 relay.libernet.app,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com,40.7357,-74.1724 +relay.nostromo.social,49.4543,11.0746 +relay.magiccity.live,25.8128,-80.2377 nostr.coincards.com,53.5501,-113.469 -ynostr.yael.at,60.1699,24.9384 -slick.mjex.me,39.048,-77.4817 -nostr.agentcampfire.com,50.8933,6.05805 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.artiostr.ch,43.6532,-79.3832 -relay.davidebtc.me,50.1109,8.68213 -shu01.shugur.net,21.4902,39.2246 -relay.nostr.band,60.1699,24.9384 -relay.evanverma.com,40.8302,-74.1299 -nostr.simplex.icu,50.8198,-1.08798 -wot.nostr.net,43.6532,-79.3832 -relay.nostr.vet,52.6467,4.7395 -r.lostr.net,52.3676,4.90414 -relay.getsafebox.app,43.6532,-79.3832 +prl.plus,38.9072,-77.0369 +relay.unknown.cloud,40.7357,-74.1724 +nostr.ovia.to,40.7128,-74.006 +alien.macneilmediagroup.com,40.7357,-74.1724 +relay.mattybs.lol,40.7357,-74.1724 +nostr.blankfors.se,60.1699,24.9384 +relay2.ngengine.org,40.7357,-74.1724 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +nostr.casa21.space,43.6532,-79.3832 +nostr.satstralia.com,64.1476,-21.9392 relay.moinsen.com,50.4754,12.3683 -nostr.luisschwab.net,43.6532,-79.3832 -strfry.elswa-dev.online,48.8566,2.35222 -alienos.libretechsystems.xyz,55.4724,9.87335 -nostr.overmind.lol,40.7357,-74.1724 +relay.arx-ccn.com,50.4754,12.3683 +relay03.lnfi.network,39.0997,-94.5786 +relay.nostr.wirednet.jp,34.706,135.493 +relay.satlantis.io,32.8769,-80.0114 +nostr-relay.zimage.com,34.282,-118.439 +nostr.liberty.fans,36.9104,-89.5875 +relay.snort.social,40.7357,-74.1724 +black.nostrcity.club,41.8781,-87.6298 +espelho.girino.org,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 nos.xmark.cc,50.6924,3.20113 -relay.degmods.com,50.4754,12.3683 -relay.seq1.net,40.7128,-74.006 -relay.uid.ovh,43.6532,-79.3832 -santo.iguanatech.net,40.8302,-74.1299 -nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.hekster.org,37.3986,-121.964 -wheat.happytavern.co,43.6532,-79.3832 -nostr-02.czas.top,53.471,9.88208 -satsage.xyz,37.3986,-121.964 -no.str.cr,9.92857,-84.0528 -relay.puresignal.news,40.7357,-74.1724 -nostr-relay.nextblockvending.com,47.2343,-119.853 -keys.nostr1.com,40.7057,-74.0136 -relayone.soundhsa.com,33.1384,-95.6011 -nostr-dev.wellorder.net,45.5201,-122.99 -alien.macneilmediagroup.com,40.7357,-74.1724 -nostr.kalf.org,52.3676,4.90414 -nostrelites.org,41.8781,-87.6298 -temp.iris.to,43.6532,-79.3832 -relay.utxo.farm,35.6916,139.768 -freelay.sovbit.host,64.1476,-21.9392 -relay.nosto.re,51.8933,4.42083 +orangesync.tech,50.1109,8.68213 inbox.azzamo.net,52.2633,21.0283 -nostr.ovia.to,43.6532,-79.3832 -nostr.lostr.space,40.7357,-74.1724 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.nostar.org,40.7357,-74.1724 -relay.mccormick.cx,52.3563,4.95714 -nostr.0x7e.xyz,47.4988,8.72369 -relay.0xchat.com,1.35208,103.82 -relay.thebluepulse.com,40.7357,-74.1724 -relay.letsfo.com,51.098,17.0321 -nostrelay.circum.space,52.3676,4.90414 -nostr-relay.psfoundation.info,39.0438,-77.4874 -strfry.shock.network,41.8959,-88.2169 -nostr-2.21crypto.ch,47.4988,8.72369 -relay1.nostrchat.io,60.1699,24.9384 -nostr.plantroon.com,50.1013,8.62643 -relay.artx.market,43.652,-79.3633 -nostr.chaima.info,51.223,6.78245 -wot.nostr.place,30.2672,-97.7431 -nostr.rblb.it,43.4633,11.8796 -relay.magiccity.live,25.8128,-80.2377 -soloco.nl,40.7357,-74.1724 -dizzyspells.nostr1.com,40.7128,-74.006 -relay.zone667.com,60.1699,24.9384 +nostr.calitabby.net,39.9268,-75.0246 nostr-01.uid.ovh,43.6532,-79.3832 -zap.watch,45.5029,-73.5723 -relay.wolfcoil.com,35.6092,139.73 -relay.nostrdice.com,-33.8688,151.209 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -relay.btcforplebs.com,40.7357,-74.1724 -nostr.sathoarder.com,48.5734,7.75211 -nostr.azzamo.net,52.2633,21.0283 -wot.utxo.one,40.7128,-74.006 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.lumina.rocks,49.0291,8.35695 -relay.primal.net,43.6532,-79.3832 -nostr.notribe.net,40.8302,-74.1299 +wot.soundhsa.com,33.1384,-95.6011 +ribo.af.nostria.app,-26.2041,28.0473 +nostr.rblb.it,43.4633,11.8796 +nr.yay.so,46.2126,6.1154 +relay.stream.labs.h3.se,59.4016,17.9455 +schnorr.me,40.7357,-74.1724 +dizzyspells.nostr1.com,40.7057,-74.0136 +relay.islandbitcoin.com,12.8498,77.6545 +freeben666.fr,43.1204,6.12857 +relay.letsfo.com,51.098,17.0321 +relay.orangepill.ovh,49.1689,-0.358841 relay.usefusion.ai,38.7134,-78.1591 -relay-dev.satlantis.io,40.8302,-74.1299 +relay.toastr.net,40.8054,-74.0241 +relay.artx.market,43.652,-79.3633 +nostr.thebiglake.org,32.71,-96.6745 +wot.sebastix.social,51.8933,4.42083 +relay.agora.social,50.7383,15.0648 +wot.shaving.kiwi,40.7128,-74.006 +pyramid.fiatjaf.com,51.5072,-0.127586 +relay.freeplace.nl,52.3676,4.90414 +nostr.tac.lol,47.4748,-122.273 +nostr.4rs.nl,49.0291,8.35696 +wot.nostr.party,36.1627,-86.7816 +relay04.lnfi.network,39.0997,-94.5786 +relay.fundstr.me,42.3601,-71.0589 +relay.lifpay.me,1.35208,103.82 +relay.upleb.uk,52.2297,21.0122 +nostr-verified.wellorder.net,45.5201,-122.99 nostr.vulpem.com,49.4543,11.0746 -orangesync.tech,50.1109,8.68213 -relay.fountain.fm,39.0997,-94.5786 +librewot.aaroniumii.com,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +nostr.hekster.org,37.3986,-121.964 +nostr.snowbla.de,60.1699,24.9384 +cyberspace.nostr1.com,40.7057,-74.0136 +nostr-02.uid.ovh,40.7357,-74.1724 +strfry.elswa-dev.online,48.8566,2.35222 +nostr.plantroon.com,50.1013,8.62643 relay.cypherflow.ai,48.8566,2.35222 -nostr-relay.online,40.7357,-74.1724 -relay.internationalright-wing.org,-22.5022,-48.7114 -relay.nostr.place,32.7767,-96.797 -relay.npubhaus.com,40.7357,-74.1724 -relay.jeffg.fyi,43.6532,-79.3832 -nostr.night7.space,50.4754,12.3683 -nostr.4rs.nl,49.0291,8.35696 -nostr.liberty.fans,36.9104,-89.5875 ribo.eu.nostria.app,52.3676,4.90414 -nostr.bitcoiner.social,39.1585,-94.5728 -relay.basspistol.org,46.2044,6.14316 -dev-relay.lnfi.network,39.0997,-94.5786 -nostr.openhoofd.nl,51.9229,4.40833 -nostr.huszonegy.world,47.4979,19.0402 -relay.2nix.de,60.1699,24.9384 -vitor.nostr1.com,40.7057,-74.0136 -nostr.zenon.network,43.5009,-70.4428 +nostrcheck.me,43.6532,-79.3832 relay.etch.social,41.2619,-95.8608 -relay.fr13nd5.com,52.5233,13.3426 -relay.agora.social,50.7383,15.0648 -relay.credenso.cafe,43.3601,-80.3127 -relay.illuminodes.com,47.6061,-122.333 -relay.freeplace.nl,52.3676,4.90414 -relay-rpi.edufeed.org,49.4543,11.0746 -relay.bullishbounty.com,43.6532,-79.3832 -relay04.lnfi.network,39.0997,-94.5786 +relay.holzeis.me,43.6532,-79.3832 +nostr.mom,50.4754,12.3683 +wheat.happytavern.co,43.6532,-79.3832 +relay.guggero.org,47.3769,8.54169 +nostr.faultables.net,40.7357,-74.1724 +nostr-pub.wellorder.net,45.5201,-122.99 +purpura.cloud,43.6532,-79.3832 +fanfares.nostr1.com,40.7128,-74.006 +nostr-03.dorafactory.org,1.35208,103.82 +ribo.us.nostria.app,41.5868,-93.625 +temp.iris.to,43.6532,-79.3832 +relay.seq1.net,40.7128,-74.006 +ithurtswhenip.ee,51.223,6.78245 +relay.nostrcheck.me,43.6532,-79.3832 +nostr.zenon.network,43.5009,-70.4428 +nostr.red5d.dev,40.7357,-74.1724 +relay.puresignal.news,40.7357,-74.1724 +relay.lumina.rocks,49.0291,8.35695 +nostr.smartflowsocial.com,40.7357,-74.1724 +relay.mwaters.net,50.9871,2.12554 +nostr.noones.com,50.1109,8.68213 +relay.fountain.fm,39.0997,-94.5786 +nostr.0x7e.xyz,47.4988,8.72369 nostr-01.yakihonne.com,1.32123,103.695 -nostr-relay.xbytez.io,50.6924,3.20113 -wot.sebastix.social,51.8933,4.42083 -strfry.felixzieger.de,50.1013,8.62643 -nostr.n7ekb.net,47.4941,-122.294 -khatru.nostrver.se,51.8933,4.42083 -relayrs.notoshi.win,40.7357,-74.1724 -relay.wavlake.com,41.2619,-95.8608 +orangepiller.org,60.1699,24.9384 +relay.0xchat.com,1.35208,103.82 +articles.layer3.news,37.3387,-121.885 +purplerelay.com,50.1109,8.68213 +nostr.makibisskey.work,40.7357,-74.1724 +nostr.bitcoiner.social,39.1585,-94.5728 wot.sudocarlos.com,51.5072,-0.127586 -nostr.sagaciousd.com,49.2827,-123.121 -relay.islandbitcoin.com,12.8498,77.6545 -trizone.dev,1.35208,103.82 -schnorr.me,40.7357,-74.1724 -relay.vrtmrz.net,40.7357,-74.1724 -relay.ditto.pub,43.6532,-79.3832 +relay.notoshi.win,13.4166,101.335 +a.nos.lol,50.4754,12.3683 +relay.evanverma.com,40.8302,-74.1299 +no.str.cr,9.92857,-84.0528 +mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +nostr-relay.psfoundation.info,39.0438,-77.4874 +strfry.shock.network,41.8959,-88.2169 +nostr.myshosholoza.co.za,52.3676,4.90414 +relay.samt.st,40.8302,-74.1299 +nostr.azzamo.net,52.2633,21.0283 +premium.primal.net,40.7357,-74.1724 +relay.npubhaus.com,40.7357,-74.1724 +nostr.lostr.space,43.6532,-79.3832 +nostr-relay.cbrx.io,40.7357,-74.1724 +nostr.notribe.net,40.8302,-74.1299 +santo.iguanatech.net,40.8302,-74.1299 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.rikmeijer.nl,50.4754,12.3683 +relay.primal.net,40.7357,-74.1724 +nostr.spaceshell.xyz,40.7128,-74.006 +relay.electriclifestyle.com,26.2897,-80.1293 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +freelay.sovbit.host,64.1476,-21.9392 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay.nostx.io,40.7357,-74.1724 From bb3dd9c1e28aa1ab351037d8fc3a7a221c708d4c Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 9 Nov 2025 06:21:43 +0000 Subject: [PATCH 09/24] Automated update of relay data - Sun Nov 9 06:21:43 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 521 +++++++++++++-------------- 1 file changed, 257 insertions(+), 264 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 5d6733086..0c2cf0880 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,286 +1,279 @@ Relay URL,Latitude,Longitude -nostrelay.memory-art.xyz,40.7128,-74.006 -nos.lol,50.4754,12.3683 -srtrelay.c-stellar.net,40.7357,-74.1724 -nostr.agentcampfire.com,50.8933,6.05805 -wot.basspistol.org,49.4521,11.0767 -relay.mostro.network,40.8302,-74.1299 -relay.nsnip.io,60.1699,24.9384 -nostr-relay.xbytez.io,50.6924,3.20113 -nostr.sagaciousd.com,49.2827,-123.121 -relay.barine.co,43.6532,-79.3832 -relay.thebluepulse.com,49.0291,8.35696 -strfry.bonsai.com,37.8715,-122.273 -nostr.n7ekb.net,47.4941,-122.294 -relay.lightning.pub,41.8959,-88.2169 -relay.nosto.re,51.8933,4.42083 -wot.sovbit.host,64.1466,-21.9426 -nostr.einundzwanzig.space,50.1109,8.68213 -shu01.shugur.net,21.4902,39.2246 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -nproxy.kristapsk.lv,60.1699,24.9384 -soloco.nl,40.7357,-74.1724 +alien.macneilmediagroup.com,43.6532,-79.3832 +articles.layer3.news,37.3387,-121.885 nostr.coincrowd.fund,39.0438,-77.4874 -zap.watch,45.5029,-73.5723 -relay.olas.app,50.4754,12.3683 -bcast.girino.org,40.7357,-74.1724 -theoutpost.life,64.1476,-21.9392 -r.bitcoinhold.net,43.6532,-79.3832 -relay.2nix.de,60.1699,24.9384 -relay.btcforplebs.com,40.7357,-74.1724 -nostr.carroarmato0.be,50.9928,3.26317 -relay.nostriches.club,43.6532,-79.3832 -yabu.me,35.6092,139.73 -bcast.seutoba.com.br,43.6532,-79.3832 +nostr.tavux.tech,48.8575,2.35138 +strfry.felixzieger.de,50.1013,8.62643 +nostr.bond,50.1109,8.68213 +nostr.zenon.network,43.5009,-70.4428 +nostr.snowbla.de,60.1699,24.9384 +nostr.hekster.org,37.3986,-121.964 +relay.nostriot.com,41.5695,-83.9786 +relay.etch.social,41.2619,-95.8608 +relay.moinsen.com,50.4754,12.3683 +nostr.stakey.net,52.3676,4.90414 +ribo.af.nostria.app,-26.2041,28.0473 +nostr.rblb.it,43.7094,10.6582 adre.su,59.9311,30.3609 -shu05.shugur.net,48.8566,2.35222 +nr.yay.so,46.2126,6.1154 +nostr.oxtr.dev,50.4754,12.3683 +relay.degmods.com,50.4754,12.3683 +relay.ngengine.org,43.6532,-79.3832 +relay.nosto.re,51.5792,4.58333 +nostr.red5d.dev,43.6532,-79.3832 +relay.thebluepulse.com,49.4521,11.0767 +cyberspace.nostr1.com,40.7128,-74.006 nostr.data.haus,50.4754,12.3683 -relay.ru.ac.th,13.7584,100.622 -nostrcheck.tnsor.network,43.6532,-79.3832 -relay.angor.io,48.1046,11.6002 -wot.brightbolt.net,47.6735,-116.781 -nostr.sathoarder.com,48.5734,7.75211 -shu02.shugur.net,21.4902,39.2246 -relay.nostriot.com,41.5695,-83.9786 -relay.nostar.org,40.7357,-74.1724 -relay.mccormick.cx,52.3563,4.95714 -relay.nostraddress.com,40.7357,-74.1724 -nostr.spicyz.io,40.7357,-74.1724 -nostream.breadslice.com,1.35208,103.82 -wot.nostr.net,40.7357,-74.1724 -nostr-2.21crypto.ch,47.4988,8.72369 +relay.davidebtc.me,50.1109,8.68213 +relay5.bitransfer.org,43.6532,-79.3832 +soloco.nl,43.6532,-79.3832 +nostr.carroarmato0.be,50.9928,3.26317 +schnorr.me,43.6532,-79.3832 +nostr.noones.com,50.1109,8.68213 wot.nostr.place,30.2672,-97.7431 -nostr.night7.space,50.4754,12.3683 -nostr2.girino.org,43.6532,-79.3832 -nostr.21crypto.ch,47.4988,8.72369 -relay.ditto.pub,43.6532,-79.3832 -relay02.lnfi.network,39.0997,-94.5786 -relay.degmods.com,50.4754,12.3683 -nostr.chaima.info,51.223,6.78245 -relayrs.notoshi.win,43.6532,-79.3832 -nostr.openhoofd.nl,51.9229,4.40833 -relay.wellorder.net,45.5201,-122.99 -relayone.geektank.ai,18.2148,-63.0574 -wot.dtonon.com,43.6532,-79.3832 -relay.hook.cafe,43.6532,-79.3832 -relay.tagayasu.xyz,43.6715,-79.38 -ynostr.yael.at,60.1699,24.9384 -relay.uid.ovh,40.7357,-74.1724 -nostr.girino.org,43.6532,-79.3832 -relayone.soundhsa.com,33.1384,-95.6011 -relay2.angor.io,48.1046,11.6002 -nostr.stakey.net,52.3676,4.90414 -relay.agorist.space,52.3734,4.89406 +nostr.commonshub.brussels,49.4543,11.0746 +x.kojira.io,37.7803,-122.39 +relay.islandbitcoin.com,12.8498,77.6545 +relay.magiccity.live,25.8128,-80.2377 +relay.cosmicbolt.net,37.3986,-121.964 +dev-relay.lnfi.network,39.0997,-94.5786 +nostr-relay.psfoundation.info,39.0438,-77.4874 +wot.shaving.kiwi,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.angor.io,48.1046,11.6002 +relay.illuminodes.com,47.6061,-122.333 +nostr.n7ekb.net,47.4941,-122.294 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +nostr.myshosholoza.co.za,52.3676,4.90414 +strfry.bonsai.com,37.8715,-122.273 +relay.sigit.io,50.4754,12.3683 alienos.libretechsystems.xyz,55.4724,9.87335 -nostr.hifish.org,47.4043,8.57398 -nostr.hole.cafe,60.1699,24.9384 -x.kojira.io,40.7357,-74.1724 -nostr.zoracle.org,45.6018,-121.185 -relay.getsafebox.app,43.6532,-79.3832 +relay.siamdev.cc,13.9178,100.424 +nostr.bitcoiner.social,39.1585,-94.5728 +relay.lifpay.me,1.35208,103.82 +nostr.girino.org,43.6532,-79.3832 +purplerelay.com,50.1109,8.68213 +relay01.lnfi.network,39.0997,-94.5786 +no.str.cr,9.92857,-84.0528 +nostr.tac.lol,47.4748,-122.273 nostr.simplex.icu,50.8198,-1.08798 -relay.basspistol.org,46.2044,6.14316 -relay.davidebtc.me,50.1109,8.68213 -nostr.tadryanom.me,43.6532,-79.3832 -relay.nostrhub.tech,49.0291,8.35696 -nostr.bilthon.dev,25.8128,-80.2377 -nostr-rs-relay-ishosta.phamthanh.me,40.7357,-74.1724 -nostr.huszonegy.world,47.4979,19.0402 -bitcoiner.social,39.1585,-94.5728 -nostr-02.yakihonne.com,1.32123,103.695 -vitor.nostr1.com,40.7128,-74.006 -relay.wavlake.com,41.2619,-95.8608 -librerelay.aaroniumii.com,40.7357,-74.1724 -gnostr.com,42.6978,23.3246 -relay.nostrdice.com,-33.8688,151.209 -nostr-dev.wellorder.net,45.5201,-122.99 -strfry.felixzieger.de,50.1013,8.62643 -relay.ngengine.org,43.6532,-79.3832 -relay.wolfcoil.com,35.6092,139.73 -relay.coinos.io,40.7357,-74.1724 -relay.13room.space,40.7357,-74.1724 -relay.siamdev.cc,13.8434,100.363 -relay.bitcoinveneto.org,64.1466,-21.9426 -fenrir-s.notoshi.win,43.6532,-79.3832 -relay.internationalright-wing.org,-22.5022,-48.7114 -slick.mjex.me,39.048,-77.4817 -nostr.camalolo.com,24.1469,120.684 +relay.hook.cafe,43.6532,-79.3832 +nostr-02.uid.ovh,43.6532,-79.3832 +relay.usefusion.ai,38.7134,-78.1591 +santo.iguanatech.net,40.8302,-74.1299 +relay.toastr.net,40.8054,-74.0241 +nos.xmark.cc,50.6924,3.20113 +nostr.blankfors.se,60.1699,24.9384 nostr.88mph.life,43.6532,-79.3832 -nostrelay.circum.space,52.3676,4.90414 -relay.dwadziesciajeden.pl,52.2297,21.0122 -nostr.luisschwab.net,43.6532,-79.3832 -relay.goodmorningbitcoin.com,43.6532,-79.3832 -strfry.openhoofd.nl,51.9229,4.40833 -noxir.kpherox.dev,34.8587,135.509 -relay.nostr.band,60.1699,24.9384 -r.lostr.net,52.3676,4.90414 -nostr.now,36.55,139.733 -relay.endfiat.money,40.7128,-74.006 -offchain.pub,47.6743,-117.112 -nostr.kalf.org,52.3676,4.90414 -wot.dergigi.com,64.1476,-21.9392 -relay.hasenpfeffr.com,39.0438,-77.4874 -relayb.uid.ovh,43.6532,-79.3832 -relay.bitcoindistrict.org,40.7357,-74.1724 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostr-relay.online,40.7357,-74.1724 -relay.credenso.cafe,43.3601,-80.3127 +nostr.21crypto.ch,47.5356,8.73209 +relay.samt.st,40.8302,-74.1299 +nostr.azzamo.net,52.2633,21.0283 +wot.sovbit.host,64.1466,-21.9426 +nostr-01.yakihonne.com,1.32123,103.695 +wot.sudocarlos.com,51.5072,-0.127586 +nostr-pub.wellorder.net,45.5201,-122.99 +nostr.sagaciousd.com,49.2827,-123.121 +nostr.thebiglake.org,32.71,-96.6745 +relay.mostro.network,40.8302,-74.1299 +yabu.me,35.6092,139.73 +relay.holzeis.me,43.6532,-79.3832 +nostr-dev.wellorder.net,45.5201,-122.99 +nproxy.kristapsk.lv,60.1699,24.9384 +relay.freeplace.nl,52.3676,4.90414 trizone.dev,1.35208,103.82 -relay.nostr.net,50.4754,12.3683 -nostr-02.czas.top,53.471,9.88208 -relay.sigit.io,50.4754,12.3683 -relay.nostr.vet,52.6467,4.7395 -relay.vrtmrz.net,40.7357,-74.1724 -khatru.nostrver.se,51.8933,4.42083 -relay.illuminodes.com,47.6061,-122.333 -relay01.lnfi.network,39.0997,-94.5786 -relay.javi.space,43.4633,11.8796 -nostrelites.org,41.8781,-87.6298 +relay.0xchat.com,1.35208,103.82 +relay.lumina.rocks,49.0291,8.35695 +relay.nostriches.club,43.6532,-79.3832 +nostr.liberty.fans,36.9104,-89.5875 relay.chorus.community,50.1109,8.68213 +nostr.agentcampfire.com,50.8933,6.05805 +relay.evanverma.com,40.8302,-74.1299 relay.wavefunc.live,34.0362,-118.443 -shu04.shugur.net,25.2604,55.2989 -dev-relay.lnfi.network,39.0997,-94.5786 -relay.jeffg.fyi,43.6532,-79.3832 -nostr.davidebtc.me,50.1109,8.68213 -relay.fr13nd5.com,52.5233,13.3426 -wot.tealeaf.dev,33.7488,-84.3877 -relay.bullishbounty.com,40.7357,-74.1724 -nostr.mikoshi.de,52.52,13.405 -relay-dev.satlantis.io,40.8302,-74.1299 -promo.nextblock.app,40.7357,-74.1724 +relay.fountain.fm,39.0997,-94.5786 +relay.trustroots.org,43.6532,-79.3832 +relay.routstr.com,43.6532,-79.3832 +nostr.night7.space,50.4754,12.3683 +bitcoiner.social,39.1585,-94.5728 +nos.lol,50.4754,12.3683 +wot.soundhsa.com,33.1384,-95.6011 +promo.nextblock.app,43.6532,-79.3832 +relayone.soundhsa.com,33.1384,-95.6011 +purpura.cloud,43.6532,-79.3832 +nostr-relay.xbytez.io,50.6924,3.20113 +satsage.xyz,37.3986,-121.964 +relay2.ngengine.org,43.6532,-79.3832 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +nostr.hifish.org,47.3769,8.54169 +relay.internationalright-wing.org,-22.5022,-48.7114 +nostr-2.21crypto.ch,47.5356,8.73209 +relay2.angor.io,48.1046,11.6002 +relay.arx-ccn.com,50.4754,12.3683 +nostr.vulpem.com,49.4543,11.0746 nostr.jerrynya.fun,31.2304,121.474 -nostr.oxtr.dev,50.4754,12.3683 -relay-rpi.edufeed.org,49.4543,11.0746 -relay.origin.land,35.6673,139.751 -relay.aloftus.io,34.0881,-118.379 -relay.nostr.place,32.7767,-96.797 -relay.cosmicbolt.net,37.3986,-121.964 -relay.21e6.cz,50.1682,14.0546 -relay.libernet.app,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com,40.7357,-74.1724 -relay.nostromo.social,49.4543,11.0746 -relay.magiccity.live,25.8128,-80.2377 +relay.nostx.io,43.6532,-79.3832 +temp.iris.to,43.6532,-79.3832 +relay.bitcoinveneto.org,64.1466,-21.9426 +relay.stream.labs.h3.se,59.4016,17.9455 +relay.hasenpfeffr.com,39.0438,-77.4874 +relay.wellorder.net,45.5201,-122.99 +ynostr.yael.at,60.1699,24.9384 +nostr.chaima.info,51.223,6.78245 +pyramid.fiatjaf.com,51.5072,-0.127586 +relay.getsafebox.app,43.6532,-79.3832 +nostr-relay.online,43.6532,-79.3832 +nostr-03.dorafactory.org,1.35208,103.82 +nostr.spicyz.io,43.6532,-79.3832 +relay.vrtmrz.net,43.6532,-79.3832 +wot.dtonon.com,43.6532,-79.3832 nostr.coincards.com,53.5501,-113.469 -prl.plus,38.9072,-77.0369 -relay.unknown.cloud,40.7357,-74.1724 -nostr.ovia.to,40.7128,-74.006 -alien.macneilmediagroup.com,40.7357,-74.1724 -relay.mattybs.lol,40.7357,-74.1724 -nostr.blankfors.se,60.1699,24.9384 -relay2.ngengine.org,40.7357,-74.1724 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -nostr.casa21.space,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 +relay.2nix.de,60.1699,24.9384 +nostr.now,36.55,139.733 +nostr.zoracle.org,45.6018,-121.185 +nostr.luisschwab.net,43.6532,-79.3832 +librerelay.aaroniumii.com,43.6532,-79.3832 +wot.yesnostr.net,50.9871,2.12554 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.smartflowsocial.com,43.6532,-79.3832 +black.nostrcity.club,41.8781,-87.6298 +relay.basspistol.org,46.2044,6.14316 +khatru.nostrver.se,51.5792,4.58333 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +vitor.nostr1.com,40.7057,-74.0136 nostr.satstralia.com,64.1476,-21.9392 -relay.moinsen.com,50.4754,12.3683 -relay.arx-ccn.com,50.4754,12.3683 -relay03.lnfi.network,39.0997,-94.5786 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.fundstr.me,42.3601,-71.0589 +shu02.shugur.net,21.4902,39.2246 +relay.fr13nd5.com,52.5233,13.3426 +nostr-relay.amethyst.name,39.0438,-77.4874 +theoutpost.life,64.1476,-21.9392 +wheat.happytavern.co,43.6532,-79.3832 +nostr.notribe.net,40.8302,-74.1299 +nostrcheck.me,43.6532,-79.3832 +relay.notoshi.win,14.2046,101.213 +relayb.uid.ovh,43.6532,-79.3832 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.nostar.org,43.6532,-79.3832 +slick.mjex.me,39.048,-77.4817 +nostrelay.memory-art.xyz,43.6532,-79.3832 +relay.libernet.app,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +relay.puresignal.news,37.7803,-122.39 +relay.javi.space,43.4633,11.8796 +relay.dwadziesciajeden.pl,52.2297,21.0122 +nostr.mikoshi.de,52.52,13.405 +nostr.kalf.org,52.3676,4.90414 +relay.guggero.org,47.3769,8.54169 +relay.orangepill.ovh,49.1689,-0.358841 +hivetalk.nostr1.com,40.7057,-74.0136 +relayrs.notoshi.win,43.6532,-79.3832 +relay.uid.ovh,43.6532,-79.3832 relay.nostr.wirednet.jp,34.706,135.493 +ribo.eu.nostria.app,52.3676,4.90414 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.endfiat.money,43.6532,-79.3832 +nostr.sathoarder.com,48.5734,7.75211 +nostr.rikmeijer.nl,50.4754,12.3683 +relay.jeffg.fyi,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +relay.npubhaus.com,43.6532,-79.3832 +nostrcheck.tnsor.network,43.6532,-79.3832 +strfry.shock.network,41.8959,-88.2169 +nostrelay.circum.space,52.3676,4.90414 +nostr.spaceshell.xyz,43.6532,-79.3832 +freelay.sovbit.host,64.1476,-21.9392 +relay.ditto.pub,43.6532,-79.3832 +relay.wavlake.com,41.2619,-95.8608 +relay.tagayasu.xyz,43.6715,-79.38 +nostr.casa21.space,43.6532,-79.3832 +relay02.lnfi.network,39.0997,-94.5786 +shu01.shugur.net,21.4902,39.2246 relay.satlantis.io,32.8769,-80.0114 -nostr-relay.zimage.com,34.282,-118.439 -nostr.liberty.fans,36.9104,-89.5875 -relay.snort.social,40.7357,-74.1724 -black.nostrcity.club,41.8781,-87.6298 -espelho.girino.org,43.6532,-79.3832 -relay.damus.io,43.6532,-79.3832 -nos.xmark.cc,50.6924,3.20113 -orangesync.tech,50.1109,8.68213 -inbox.azzamo.net,52.2633,21.0283 -nostr.calitabby.net,39.9268,-75.0246 +nostr.tadryanom.me,43.6532,-79.3832 +relay.nsnip.io,60.1699,24.9384 +nostr.einundzwanzig.space,50.1109,8.68213 +relay.lightning.pub,41.8959,-88.2169 +nostr.camalolo.com,24.1469,120.684 +relay.aloftus.io,34.0881,-118.379 +relay.nostrcheck.me,43.6532,-79.3832 +wot.sebastix.social,51.5792,4.58333 +relay.nostr.net,50.4754,12.3683 nostr-01.uid.ovh,43.6532,-79.3832 -wot.soundhsa.com,33.1384,-95.6011 -ribo.af.nostria.app,-26.2041,28.0473 -nostr.rblb.it,43.4633,11.8796 -nr.yay.so,46.2126,6.1154 -relay.stream.labs.h3.se,59.4016,17.9455 -schnorr.me,40.7357,-74.1724 -dizzyspells.nostr1.com,40.7057,-74.0136 -relay.islandbitcoin.com,12.8498,77.6545 -freeben666.fr,43.1204,6.12857 -relay.letsfo.com,51.098,17.0321 -relay.orangepill.ovh,49.1689,-0.358841 -relay.usefusion.ai,38.7134,-78.1591 -relay.toastr.net,40.8054,-74.0241 +nostr.davidebtc.me,50.1109,8.68213 +ribo.us.nostria.app,41.5868,-93.625 +relay.agorist.space,52.3734,4.89406 +relay.btcforplebs.com,37.7803,-122.39 +relay.21e6.cz,50.7383,15.0648 +nostr.0x7e.xyz,47.4988,8.72369 +ithurtswhenip.ee,51.223,6.78245 +relay.barine.co,43.6532,-79.3832 relay.artx.market,43.652,-79.3633 -nostr.thebiglake.org,32.71,-96.6745 -wot.sebastix.social,51.8933,4.42083 -relay.agora.social,50.7383,15.0648 -wot.shaving.kiwi,40.7128,-74.006 -pyramid.fiatjaf.com,51.5072,-0.127586 -relay.freeplace.nl,52.3676,4.90414 -nostr.tac.lol,47.4748,-122.273 -nostr.4rs.nl,49.0291,8.35696 -wot.nostr.party,36.1627,-86.7816 +relay.nostr.vet,52.6467,4.7395 +gnostr.com,42.6978,23.3246 +relay03.lnfi.network,39.0997,-94.5786 +nostr-02.yakihonne.com,1.32123,103.695 +relay.mattybs.lol,43.6532,-79.3832 +dizzyspells.nostr1.com,40.7128,-74.006 +nostr.ovia.to,43.6532,-79.3832 +relay.wolfcoil.com,35.6092,139.73 +relay.letsfo.com,51.098,17.0321 +relay.origin.land,35.6673,139.751 +offchain.pub,47.6743,-117.112 +relay.bullishbounty.com,43.6532,-79.3832 +nostr.bilthon.dev,25.8128,-80.2377 +relay-dev.satlantis.io,40.8302,-74.1299 +fenrir-s.notoshi.win,43.6532,-79.3832 relay04.lnfi.network,39.0997,-94.5786 -relay.fundstr.me,42.3601,-71.0589 -relay.lifpay.me,1.35208,103.82 -relay.upleb.uk,52.2297,21.0122 +wot.nostr.net,43.6532,-79.3832 +relay.electriclifestyle.com,26.2897,-80.1293 +relay.mccormick.cx,52.3563,4.95714 +nostr.openhoofd.nl,51.9229,4.40833 +nostream.breadslice.com,1.35208,103.82 +shu05.shugur.net,48.8566,2.35222 +prl.plus,56.9677,24.1056 nostr-verified.wellorder.net,45.5201,-122.99 -nostr.vulpem.com,49.4543,11.0746 -librewot.aaroniumii.com,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -nostr.hekster.org,37.3986,-121.964 -nostr.snowbla.de,60.1699,24.9384 -cyberspace.nostr1.com,40.7057,-74.0136 -nostr-02.uid.ovh,40.7357,-74.1724 -strfry.elswa-dev.online,48.8566,2.35222 -nostr.plantroon.com,50.1013,8.62643 -relay.cypherflow.ai,48.8566,2.35222 -ribo.eu.nostria.app,52.3676,4.90414 -nostrcheck.me,43.6532,-79.3832 -relay.etch.social,41.2619,-95.8608 -relay.holzeis.me,43.6532,-79.3832 -nostr.mom,50.4754,12.3683 -wheat.happytavern.co,43.6532,-79.3832 -relay.guggero.org,47.3769,8.54169 -nostr.faultables.net,40.7357,-74.1724 -nostr-pub.wellorder.net,45.5201,-122.99 -purpura.cloud,43.6532,-79.3832 -fanfares.nostr1.com,40.7128,-74.006 -nostr-03.dorafactory.org,1.35208,103.82 -ribo.us.nostria.app,41.5868,-93.625 -temp.iris.to,43.6532,-79.3832 -relay.seq1.net,40.7128,-74.006 -ithurtswhenip.ee,51.223,6.78245 -relay.nostrcheck.me,43.6532,-79.3832 -nostr.zenon.network,43.5009,-70.4428 -nostr.red5d.dev,40.7357,-74.1724 -relay.puresignal.news,40.7357,-74.1724 -relay.lumina.rocks,49.0291,8.35695 -nostr.smartflowsocial.com,40.7357,-74.1724 -relay.mwaters.net,50.9871,2.12554 -nostr.noones.com,50.1109,8.68213 -relay.fountain.fm,39.0997,-94.5786 -nostr.0x7e.xyz,47.4988,8.72369 -nostr-01.yakihonne.com,1.32123,103.695 -orangepiller.org,60.1699,24.9384 -relay.0xchat.com,1.35208,103.82 -articles.layer3.news,37.3387,-121.885 -purplerelay.com,50.1109,8.68213 -nostr.makibisskey.work,40.7357,-74.1724 -nostr.bitcoiner.social,39.1585,-94.5728 -wot.sudocarlos.com,51.5072,-0.127586 -relay.notoshi.win,13.4166,101.335 +wot.basspistol.org,49.4521,11.0767 +relay.nostr.place,32.7767,-96.797 +zap.watch,45.5029,-73.5723 +relay.unknown.cloud,43.6532,-79.3832 +relay.nostromo.social,49.4543,11.0746 +nostr.huszonegy.world,47.4979,19.0402 +strfry.openhoofd.nl,51.9229,4.40833 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +wot.nostr.party,36.1627,-86.7816 +relay.snort.social,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 a.nos.lol,50.4754,12.3683 -relay.evanverma.com,40.8302,-74.1299 -no.str.cr,9.92857,-84.0528 -mhp258zrpiiwn.clorecloud.net,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -nostr-relay.psfoundation.info,39.0438,-77.4874 -strfry.shock.network,41.8959,-88.2169 -nostr.myshosholoza.co.za,52.3676,4.90414 -relay.samt.st,40.8302,-74.1299 -nostr.azzamo.net,52.2633,21.0283 -premium.primal.net,40.7357,-74.1724 -relay.npubhaus.com,40.7357,-74.1724 +relay.credenso.cafe,43.3601,-80.3127 nostr.lostr.space,43.6532,-79.3832 -nostr-relay.cbrx.io,40.7357,-74.1724 -nostr.notribe.net,40.8302,-74.1299 -santo.iguanatech.net,40.8302,-74.1299 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr.rikmeijer.nl,50.4754,12.3683 -relay.primal.net,40.7357,-74.1724 -nostr.spaceshell.xyz,40.7128,-74.006 -relay.electriclifestyle.com,26.2897,-80.1293 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -freelay.sovbit.host,64.1476,-21.9392 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay.nostx.io,40.7357,-74.1724 +nostr2.girino.org,43.6532,-79.3832 +nostr-relay.corb.net,38.8353,-104.822 +orangesync.tech,51.5072,-0.127586 +relay.coinos.io,43.6532,-79.3832 +orangepiller.org,60.1699,24.9384 +wot.dergigi.com,64.1476,-21.9392 +nostr-02.czas.top,53.471,9.88208 +relay.agora.social,50.7383,15.0648 +relay.nostrhub.tech,49.0291,8.35696 +nostr.4rs.nl,49.0291,8.35696 +nostr-relay.zimage.com,34.282,-118.439 +relay.bitcoindistrict.org,43.6532,-79.3832 +nostr.overmind.lol,37.7803,-122.39 +r.bitcoinhold.net,43.6532,-79.3832 +relay.olas.app,50.4754,12.3683 +inbox.azzamo.net,52.2633,21.0283 +fanfares.nostr1.com,40.7057,-74.0136 +freeben666.fr,43.7221,7.15296 +strfry.elswa-dev.online,50.1109,8.68213 +relay.cypherflow.ai,48.8566,2.35222 +nostr.plantroon.com,50.1013,8.62643 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.primal.net,43.6532,-79.3832 +premium.primal.net,43.6532,-79.3832 +bcast.seutoba.com.br,43.6532,-79.3832 +relay.nostr.band,60.1699,24.9384 +relay.jmoose.rocks,60.1699,24.9384 +shu04.shugur.net,25.2604,55.2989 +espelho.girino.org,43.6532,-79.3832 From cae1e3d5b970de9b38120bc3d6e02880a5d8536a Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 16 Nov 2025 06:22:37 +0000 Subject: [PATCH 10/24] Automated update of relay data - Sun Nov 16 06:22:37 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 511 ++++++++++++++------------- 1 file changed, 259 insertions(+), 252 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 0c2cf0880..80f8293b7 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,279 +1,286 @@ Relay URL,Latitude,Longitude -alien.macneilmediagroup.com,43.6532,-79.3832 -articles.layer3.news,37.3387,-121.885 -nostr.coincrowd.fund,39.0438,-77.4874 -nostr.tavux.tech,48.8575,2.35138 -strfry.felixzieger.de,50.1013,8.62643 -nostr.bond,50.1109,8.68213 -nostr.zenon.network,43.5009,-70.4428 -nostr.snowbla.de,60.1699,24.9384 -nostr.hekster.org,37.3986,-121.964 -relay.nostriot.com,41.5695,-83.9786 -relay.etch.social,41.2619,-95.8608 -relay.moinsen.com,50.4754,12.3683 -nostr.stakey.net,52.3676,4.90414 -ribo.af.nostria.app,-26.2041,28.0473 -nostr.rblb.it,43.7094,10.6582 -adre.su,59.9311,30.3609 -nr.yay.so,46.2126,6.1154 -nostr.oxtr.dev,50.4754,12.3683 -relay.degmods.com,50.4754,12.3683 -relay.ngengine.org,43.6532,-79.3832 -relay.nosto.re,51.5792,4.58333 -nostr.red5d.dev,43.6532,-79.3832 -relay.thebluepulse.com,49.4521,11.0767 -cyberspace.nostr1.com,40.7128,-74.006 -nostr.data.haus,50.4754,12.3683 -relay.davidebtc.me,50.1109,8.68213 -relay5.bitransfer.org,43.6532,-79.3832 -soloco.nl,43.6532,-79.3832 -nostr.carroarmato0.be,50.9928,3.26317 -schnorr.me,43.6532,-79.3832 -nostr.noones.com,50.1109,8.68213 -wot.nostr.place,30.2672,-97.7431 -nostr.commonshub.brussels,49.4543,11.0746 -x.kojira.io,37.7803,-122.39 -relay.islandbitcoin.com,12.8498,77.6545 -relay.magiccity.live,25.8128,-80.2377 -relay.cosmicbolt.net,37.3986,-121.964 -dev-relay.lnfi.network,39.0997,-94.5786 -nostr-relay.psfoundation.info,39.0438,-77.4874 -wot.shaving.kiwi,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.angor.io,48.1046,11.6002 -relay.illuminodes.com,47.6061,-122.333 -nostr.n7ekb.net,47.4941,-122.294 -nostr-relay.nextblockvending.com,47.2343,-119.853 +wot.brightbolt.net,47.6735,-116.781 relay-testnet.k8s.layer3.news,37.3387,-121.885 -nostr.myshosholoza.co.za,52.3676,4.90414 -strfry.bonsai.com,37.8715,-122.273 -relay.sigit.io,50.4754,12.3683 -alienos.libretechsystems.xyz,55.4724,9.87335 -relay.siamdev.cc,13.9178,100.424 -nostr.bitcoiner.social,39.1585,-94.5728 -relay.lifpay.me,1.35208,103.82 -nostr.girino.org,43.6532,-79.3832 -purplerelay.com,50.1109,8.68213 -relay01.lnfi.network,39.0997,-94.5786 -no.str.cr,9.92857,-84.0528 -nostr.tac.lol,47.4748,-122.273 -nostr.simplex.icu,50.8198,-1.08798 -relay.hook.cafe,43.6532,-79.3832 -nostr-02.uid.ovh,43.6532,-79.3832 -relay.usefusion.ai,38.7134,-78.1591 +relay.fountain.fm,39.0997,-94.5786 +relay.olas.app,50.4754,12.3683 +nostr.now,36.55,139.733 +relay.fundstr.me,42.3601,-71.0589 santo.iguanatech.net,40.8302,-74.1299 -relay.toastr.net,40.8054,-74.0241 -nos.xmark.cc,50.6924,3.20113 -nostr.blankfors.se,60.1699,24.9384 -nostr.88mph.life,43.6532,-79.3832 -nostr.21crypto.ch,47.5356,8.73209 -relay.samt.st,40.8302,-74.1299 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relay.islandbitcoin.com,12.8498,77.6545 nostr.azzamo.net,52.2633,21.0283 -wot.sovbit.host,64.1466,-21.9426 -nostr-01.yakihonne.com,1.32123,103.695 wot.sudocarlos.com,51.5072,-0.127586 -nostr-pub.wellorder.net,45.5201,-122.99 -nostr.sagaciousd.com,49.2827,-123.121 -nostr.thebiglake.org,32.71,-96.6745 -relay.mostro.network,40.8302,-74.1299 -yabu.me,35.6092,139.73 -relay.holzeis.me,43.6532,-79.3832 -nostr-dev.wellorder.net,45.5201,-122.99 -nproxy.kristapsk.lv,60.1699,24.9384 -relay.freeplace.nl,52.3676,4.90414 -trizone.dev,1.35208,103.82 -relay.0xchat.com,1.35208,103.82 -relay.lumina.rocks,49.0291,8.35695 -relay.nostriches.club,43.6532,-79.3832 -nostr.liberty.fans,36.9104,-89.5875 -relay.chorus.community,50.1109,8.68213 -nostr.agentcampfire.com,50.8933,6.05805 -relay.evanverma.com,40.8302,-74.1299 +nostr.spaceshell.xyz,43.6532,-79.3832 +nostr.red5d.dev,43.6532,-79.3832 +relay.guggero.org,47.3769,8.54169 +relay02.lnfi.network,39.0997,-94.5786 +relay.21e6.cz,50.7383,15.0648 +relay.orangepill.ovh,49.1689,-0.358841 +relay.bitcoindistrict.org,43.6532,-79.3832 +relay.nostrcheck.me,43.6532,-79.3832 +orangepiller.org,60.1699,24.9384 +relay.mattybs.lol,43.6532,-79.3832 +nostr.coincrowd.fund,39.0438,-77.4874 +nostr-02.uid.ovh,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +nostrcheck.me,43.6532,-79.3832 +nostr.chaima.info,51.223,6.78245 relay.wavefunc.live,34.0362,-118.443 -relay.fountain.fm,39.0997,-94.5786 +relay.artx.market,43.652,-79.3633 +black.nostrcity.club,41.8781,-87.6298 +dev-nostr.bityacht.io,25.0797,121.234 +relay.nostrhub.tech,49.0291,8.35696 +relay.snort.social,43.6532,-79.3832 +espelho.girino.org,43.6532,-79.3832 +relay.nostr.place,32.7767,-96.797 +nostr.tadryanom.me,43.6532,-79.3832 +strfry.elswa-dev.online,50.1109,8.68213 +relay.nostriot.com,41.5695,-83.9786 +nostr.rblb.it,43.7094,10.6582 +nostr-relay.online,43.6532,-79.3832 +nostr.davidebtc.me,50.1109,8.68213 +relay.hook.cafe,43.6532,-79.3832 +bcast.girino.org,43.6532,-79.3832 +theoutpost.life,64.1476,-21.9392 +shu02.shugur.net,21.4902,39.2246 +relay.illuminodes.com,47.6061,-122.333 +nostrelay.memory-art.xyz,43.6532,-79.3832 +nos.xmark.cc,50.6924,3.20113 +x.kojira.io,43.6532,-79.3832 relay.trustroots.org,43.6532,-79.3832 -relay.routstr.com,43.6532,-79.3832 -nostr.night7.space,50.4754,12.3683 -bitcoiner.social,39.1585,-94.5728 -nos.lol,50.4754,12.3683 -wot.soundhsa.com,33.1384,-95.6011 -promo.nextblock.app,43.6532,-79.3832 -relayone.soundhsa.com,33.1384,-95.6011 -purpura.cloud,43.6532,-79.3832 -nostr-relay.xbytez.io,50.6924,3.20113 +wheat.happytavern.co,43.6532,-79.3832 satsage.xyz,37.3986,-121.964 -relay2.ngengine.org,43.6532,-79.3832 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -nostr.hifish.org,47.3769,8.54169 -relay.internationalright-wing.org,-22.5022,-48.7114 -nostr-2.21crypto.ch,47.5356,8.73209 -relay2.angor.io,48.1046,11.6002 -relay.arx-ccn.com,50.4754,12.3683 -nostr.vulpem.com,49.4543,11.0746 -nostr.jerrynya.fun,31.2304,121.474 relay.nostx.io,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 +nostr.plantroon.com,50.1013,8.62643 +relay.agora.social,50.7383,15.0648 +nostr2.girino.org,43.6532,-79.3832 +vitor.nostr1.com,40.7128,-74.006 +relay-freeharmonypeople.space,38.7223,-9.13934 +relay.nostr.net,50.4754,12.3683 +nostr.bitcoiner.social,39.1585,-94.5728 +relay.puresignal.news,43.6532,-79.3832 +relay.freeplace.nl,52.3676,4.90414 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.uid.ovh,43.6532,-79.3832 relay.stream.labs.h3.se,59.4016,17.9455 -relay.hasenpfeffr.com,39.0438,-77.4874 -relay.wellorder.net,45.5201,-122.99 -ynostr.yael.at,60.1699,24.9384 -nostr.chaima.info,51.223,6.78245 -pyramid.fiatjaf.com,51.5072,-0.127586 -relay.getsafebox.app,43.6532,-79.3832 -nostr-relay.online,43.6532,-79.3832 -nostr-03.dorafactory.org,1.35208,103.82 -nostr.spicyz.io,43.6532,-79.3832 -relay.vrtmrz.net,43.6532,-79.3832 +nostr.n7ekb.net,47.4941,-122.294 +relay.btcforplebs.com,43.6532,-79.3832 +relay.siamdev.cc,13.9178,100.424 +ribo.eu.nostria.app,52.3676,4.90414 +nostr-02.czas.top,53.471,9.88208 +relay.sigit.io,50.4754,12.3683 +relay.damus.io,43.6532,-79.3832 +relay.arx-ccn.com,50.4754,12.3683 +bitcoiner.social,39.1585,-94.5728 +nostr.agentcampfire.com,50.8933,6.05805 +relay.holzeis.me,43.6532,-79.3832 +nostr.notribe.net,40.8302,-74.1299 wot.dtonon.com,43.6532,-79.3832 -nostr.coincards.com,53.5501,-113.469 -nostrelites.org,41.8781,-87.6298 -relay.2nix.de,60.1699,24.9384 -nostr.now,36.55,139.733 -nostr.zoracle.org,45.6018,-121.185 -nostr.luisschwab.net,43.6532,-79.3832 -librerelay.aaroniumii.com,43.6532,-79.3832 +relay.binaryrobot.com,43.6532,-79.3832 +relay.nostr.vet,52.6467,4.7395 +wot.basspistol.org,49.4521,11.0767 wot.yesnostr.net,50.9871,2.12554 -relay.bitcoinartclock.com,50.4754,12.3683 -nostr.smartflowsocial.com,43.6532,-79.3832 -black.nostrcity.club,41.8781,-87.6298 -relay.basspistol.org,46.2044,6.14316 -khatru.nostrver.se,51.5792,4.58333 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -vitor.nostr1.com,40.7057,-74.0136 -nostr.satstralia.com,64.1476,-21.9392 -nostr-relay.cbrx.io,43.6532,-79.3832 -relay.fundstr.me,42.3601,-71.0589 -shu02.shugur.net,21.4902,39.2246 -relay.fr13nd5.com,52.5233,13.3426 +nostr.blankfors.se,60.1699,24.9384 +relay.angor.io,48.1046,11.6002 +relay.coinos.io,43.6532,-79.3832 +relay.letsfo.com,51.098,17.0321 +nostr-relay.psfoundation.info,39.0438,-77.4874 +relay.dwadziesciajeden.pl,52.2297,21.0122 +nostr-02.yakihonne.com,1.32123,103.695 +nostr-relay.cbrx.io,37.7803,-122.39 +relay.nostr.band,60.1699,24.9384 +strfry.openhoofd.nl,51.9229,4.40833 +nostr-01.uid.ovh,43.6532,-79.3832 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.etch.social,41.2619,-95.8608 +wot.utxo.one,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +relay.2nix.de,60.1699,24.9384 +nostr.jerrynya.fun,31.2304,121.474 +relay.otherstuff.dev,43.6532,-79.3832 nostr-relay.amethyst.name,39.0438,-77.4874 -theoutpost.life,64.1476,-21.9392 -wheat.happytavern.co,43.6532,-79.3832 -nostr.notribe.net,40.8302,-74.1299 -nostrcheck.me,43.6532,-79.3832 +relay.cosmicbolt.net,37.3986,-121.964 +ynostr.yael.at,60.1699,24.9384 +relay.hasenpfeffr.com,39.0438,-77.4874 +trizone.dev,1.35208,103.82 +nostr.camalolo.com,24.1469,120.684 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.thibautduchene.fr,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 relay.notoshi.win,14.2046,101.213 -relayb.uid.ovh,43.6532,-79.3832 -relay-rpi.edufeed.org,49.4521,11.0767 +nostr.satstralia.com,64.1476,-21.9392 relay.nostar.org,43.6532,-79.3832 -slick.mjex.me,39.048,-77.4817 -nostrelay.memory-art.xyz,43.6532,-79.3832 -relay.libernet.app,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -relay.puresignal.news,37.7803,-122.39 -relay.javi.space,43.4633,11.8796 -relay.dwadziesciajeden.pl,52.2297,21.0122 -nostr.mikoshi.de,52.52,13.405 -nostr.kalf.org,52.3676,4.90414 -relay.guggero.org,47.3769,8.54169 -relay.orangepill.ovh,49.1689,-0.358841 -hivetalk.nostr1.com,40.7057,-74.0136 -relayrs.notoshi.win,43.6532,-79.3832 -relay.uid.ovh,43.6532,-79.3832 -relay.nostr.wirednet.jp,34.706,135.493 -ribo.eu.nostria.app,52.3676,4.90414 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -relay.endfiat.money,43.6532,-79.3832 -nostr.sathoarder.com,48.5734,7.75211 -nostr.rikmeijer.nl,50.4754,12.3683 -relay.jeffg.fyi,43.6532,-79.3832 +relay.anmore.me,49.6735,-124.928 +dizzyspells.nostr1.com,40.7128,-74.006 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +wot.dergigi.com,64.1476,-21.9392 +shu04.shugur.net,25.2604,55.2989 +relay.nuts.cash,34.0362,-118.443 +nostr.4rs.nl,49.0291,8.35696 +relay.nostrops.com,33.7584,-84.6375 +relay.0xchat.com,1.35208,103.82 +orangesync.tech,51.5072,-0.127586 +soloco.nl,43.6532,-79.3832 +nostr-relay.nextblockvending.com,47.2343,-119.853 +nostr.zoracle.org,45.6018,-121.185 +relay.wolfcoil.com,35.6092,139.73 +alien.macneilmediagroup.com,43.6532,-79.3832 +nostr.hifish.org,47.4043,8.57398 relay.nostrdice.com,-33.8688,151.209 +relay.lumina.rocks,49.0291,8.35695 +nostr.88mph.life,43.6532,-79.3832 +relay2.angor.io,48.1046,11.6002 +relay.origin.land,35.6673,139.751 +r.bitcoinhold.net,43.6532,-79.3832 relay.npubhaus.com,43.6532,-79.3832 +relay.divine.video,43.6532,-79.3832 +nostr.tac.lol,47.4748,-122.273 +premium.primal.net,43.6532,-79.3832 +strfry.bonsai.com,37.8715,-122.273 +relay.toastr.net,40.8054,-74.0241 +alienos.libretechsystems.xyz,55.4724,9.87335 +nostr.carroarmato0.be,50.9928,3.26317 +nos.lol,50.4754,12.3683 +relay.endfiat.money,43.6532,-79.3832 +temp.iris.to,43.6532,-79.3832 +relay.vrtmrz.net,43.6532,-79.3832 +adre.su,59.9311,30.3609 +relay.mostro.network,40.8302,-74.1299 +nostr.21crypto.ch,47.5356,8.73209 +purplerelay.com,50.1109,8.68213 +relay01.lnfi.network,39.0997,-94.5786 +relay.barine.co,43.6532,-79.3832 +pyramid.fiatjaf.com,51.5072,-0.127586 +nostr.noones.com,50.1109,8.68213 +relay.chorus.community,50.1109,8.68213 +relay03.lnfi.network,39.0997,-94.5786 +nostr.hekster.org,37.3986,-121.964 +relay.tagayasu.xyz,43.6715,-79.38 +nostr.bilthon.dev,25.8128,-80.2377 +nostr.lkjsxc.com,43.6532,-79.3832 +nostr.snowbla.de,60.1699,24.9384 +relay.usefusion.ai,38.7134,-78.1591 +relay.fr13nd5.com,52.5233,13.3426 nostrcheck.tnsor.network,43.6532,-79.3832 -strfry.shock.network,41.8959,-88.2169 +offchain.pub,47.6743,-117.112 +relay.aloftus.io,34.0881,-118.379 +nostr.data.haus,50.4754,12.3683 +nostr.kalf.org,52.3676,4.90414 +nostr.0x7e.xyz,47.4988,8.72369 +relay.bitcoinveneto.org,64.1466,-21.9426 +nostr.czas.top,50.1109,8.68213 +nostr-relay.corb.net,38.8353,-104.822 +relay.libernet.app,43.6532,-79.3832 +relayone.soundhsa.com,33.1384,-95.6011 +slick.mjex.me,39.048,-77.4817 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +wot.nostr.place,30.2672,-97.7431 +nostr.mom,50.4754,12.3683 +relay.nostriches.club,43.6532,-79.3832 +nostr.stakey.net,52.3676,4.90414 +relay2.ngengine.org,43.6532,-79.3832 +nostr.coincards.com,53.5501,-113.469 +relay.stevennoack.de,37.79,-122.401 +nostr.thebiglake.org,32.71,-96.6745 +nostr.huszonegy.world,47.4979,19.0402 +relay.nostr.wirednet.jp,34.706,135.493 +nostr.girino.org,43.6532,-79.3832 +nostr.ovia.to,43.6532,-79.3832 +nostr.tavux.tech,48.8575,2.35138 +relay.nostromo.social,49.4543,11.0746 +dev-relay.lnfi.network,39.0997,-94.5786 +fanfares.nostr1.com,40.7128,-74.006 +relay.primal.net,43.6532,-79.3832 nostrelay.circum.space,52.3676,4.90414 -nostr.spaceshell.xyz,43.6532,-79.3832 -freelay.sovbit.host,64.1476,-21.9392 +relay.cypherflow.ai,48.8566,2.35222 relay.ditto.pub,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 -relay.tagayasu.xyz,43.6715,-79.38 -nostr.casa21.space,43.6532,-79.3832 -relay02.lnfi.network,39.0997,-94.5786 -shu01.shugur.net,21.4902,39.2246 +ribo.af.nostria.app,-26.2041,28.0473 +relay.electriclifestyle.com,26.2897,-80.1293 +relay.mccormick.cx,52.3563,4.95714 +nostr-03.dorafactory.org,1.35208,103.82 relay.satlantis.io,32.8769,-80.0114 -nostr.tadryanom.me,43.6532,-79.3832 -relay.nsnip.io,60.1699,24.9384 -nostr.einundzwanzig.space,50.1109,8.68213 -relay.lightning.pub,41.8959,-88.2169 -nostr.camalolo.com,24.1469,120.684 -relay.aloftus.io,34.0881,-118.379 -relay.nostrcheck.me,43.6532,-79.3832 -wot.sebastix.social,51.5792,4.58333 -relay.nostr.net,50.4754,12.3683 -nostr-01.uid.ovh,43.6532,-79.3832 -nostr.davidebtc.me,50.1109,8.68213 -ribo.us.nostria.app,41.5868,-93.625 +nostr-pub.wellorder.net,45.5201,-122.99 +nostr.simplex.icu,50.8198,-1.08798 +hivetalk.nostr1.com,40.7057,-74.0136 +relay.lightning.pub,39.0438,-77.4874 +inbox.azzamo.net,52.2633,21.0283 +nostr.bond,50.1109,8.68213 +relay.thebluepulse.com,49.4521,11.0767 relay.agorist.space,52.3734,4.89406 -relay.btcforplebs.com,37.7803,-122.39 -relay.21e6.cz,50.7383,15.0648 -nostr.0x7e.xyz,47.4988,8.72369 -ithurtswhenip.ee,51.223,6.78245 -relay.barine.co,43.6532,-79.3832 -relay.artx.market,43.652,-79.3633 -relay.nostr.vet,52.6467,4.7395 -gnostr.com,42.6978,23.3246 -relay03.lnfi.network,39.0997,-94.5786 -nostr-02.yakihonne.com,1.32123,103.695 -relay.mattybs.lol,43.6532,-79.3832 -dizzyspells.nostr1.com,40.7128,-74.006 -nostr.ovia.to,43.6532,-79.3832 -relay.wolfcoil.com,35.6092,139.73 -relay.letsfo.com,51.098,17.0321 -relay.origin.land,35.6673,139.751 -offchain.pub,47.6743,-117.112 -relay.bullishbounty.com,43.6532,-79.3832 -nostr.bilthon.dev,25.8128,-80.2377 -relay-dev.satlantis.io,40.8302,-74.1299 -fenrir-s.notoshi.win,43.6532,-79.3832 +relay.lifpay.me,1.35208,103.82 +librerelay.aaroniumii.com,43.6532,-79.3832 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +ribo.us.nostria.app,41.5868,-93.625 +nostr.veladan.dev,43.6532,-79.3832 +relay.davidebtc.me,50.1109,8.68213 +strfry.felixzieger.de,50.1013,8.62643 relay04.lnfi.network,39.0997,-94.5786 +relay.credenso.cafe,43.3601,-80.3127 +relay.nosto.re,51.5792,4.58333 +nostr-2.21crypto.ch,47.5356,8.73209 +articles.layer3.news,37.3387,-121.885 +relay.javi.space,43.4633,11.8796 +relay-rpi.edufeed.org,49.4521,11.0767 +shu05.shugur.net,48.8566,2.35222 +relay.moinsen.com,50.4754,12.3683 +relay.getsafebox.app,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 +relay.jeffg.fyi,43.6532,-79.3832 +relay.ngengine.org,43.6532,-79.3832 +relay.ru.ac.th,13.7584,100.622 +relayrs.notoshi.win,43.6532,-79.3832 +nostr.overmind.lol,37.7803,-122.39 +nostr-relay.zimage.com,34.282,-118.439 +relay-dev.satlantis.io,40.8302,-74.1299 +wot.soundhsa.com,33.1384,-95.6011 +ithurtswhenip.ee,51.223,6.78245 +strfry.shock.network,39.0438,-77.4874 +nostr.calitabby.net,39.9268,-75.0246 wot.nostr.net,43.6532,-79.3832 -relay.electriclifestyle.com,26.2897,-80.1293 -relay.mccormick.cx,52.3563,4.95714 -nostr.openhoofd.nl,51.9229,4.40833 +relay.wavlake.com,41.2619,-95.8608 +relay.routstr.com,43.6532,-79.3832 +nostr.faultables.net,43.6532,-79.3832 +bcast.seutoba.com.br,43.6532,-79.3832 +cyberspace.nostr1.com,40.7128,-74.006 +nostr.night7.space,50.4754,12.3683 +schnorr.me,43.6532,-79.3832 nostream.breadslice.com,1.35208,103.82 -shu05.shugur.net,48.8566,2.35222 -prl.plus,56.9677,24.1056 -nostr-verified.wellorder.net,45.5201,-122.99 -wot.basspistol.org,49.4521,11.0767 -relay.nostr.place,32.7767,-96.797 -zap.watch,45.5029,-73.5723 -relay.unknown.cloud,43.6532,-79.3832 -relay.nostromo.social,49.4543,11.0746 -nostr.huszonegy.world,47.4979,19.0402 -strfry.openhoofd.nl,51.9229,4.40833 +nostr.vulpem.com,49.4543,11.0746 +relay.bitcoinartclock.com,50.4754,12.3683 +relay.degmods.com,50.4754,12.3683 +freeben666.fr,43.7221,7.15296 +nostr.openhoofd.nl,51.9229,4.40833 +nostr.casa21.space,43.6532,-79.3832 +nostr.myshosholoza.co.za,52.3676,4.90414 +nostr.lostr.space,43.6532,-79.3832 +nostr-01.yakihonne.com,1.32123,103.695 +nostr.rikmeijer.nl,50.4754,12.3683 +fenrir-s.notoshi.win,43.6532,-79.3832 +wot.shaving.kiwi,43.6532,-79.3832 +nostr.zenon.network,43.5009,-70.4428 +nproxy.kristapsk.lv,60.1699,24.9384 +relayb.uid.ovh,43.6532,-79.3832 +srtrelay.c-stellar.net,43.6532,-79.3832 +nostrelites.org,41.8781,-87.6298 relay.goodmorningbitcoin.com,43.6532,-79.3832 -wot.nostr.party,36.1627,-86.7816 -relay.snort.social,43.6532,-79.3832 -relay.damus.io,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 +nostr-relay.xbytez.io,50.6924,3.20113 +nostr.sagaciousd.com,49.2827,-123.121 +relay.wellorder.net,45.5201,-122.99 +relay.basspistol.org,46.2044,6.14316 +nostr.luisschwab.net,43.6532,-79.3832 +relay.evanverma.com,40.8302,-74.1299 +nostr.sathoarder.com,48.5734,7.75211 +relay.samt.st,40.8302,-74.1299 +nostr.mikoshi.de,50.1109,8.68213 a.nos.lol,50.4754,12.3683 -relay.credenso.cafe,43.3601,-80.3127 -nostr.lostr.space,43.6532,-79.3832 -nostr2.girino.org,43.6532,-79.3832 -nostr-relay.corb.net,38.8353,-104.822 -orangesync.tech,51.5072,-0.127586 -relay.coinos.io,43.6532,-79.3832 -orangepiller.org,60.1699,24.9384 -wot.dergigi.com,64.1476,-21.9392 -nostr-02.czas.top,53.471,9.88208 -relay.agora.social,50.7383,15.0648 -relay.nostrhub.tech,49.0291,8.35696 -nostr.4rs.nl,49.0291,8.35696 -nostr-relay.zimage.com,34.282,-118.439 -relay.bitcoindistrict.org,43.6532,-79.3832 -nostr.overmind.lol,37.7803,-122.39 -r.bitcoinhold.net,43.6532,-79.3832 -relay.olas.app,50.4754,12.3683 -inbox.azzamo.net,52.2633,21.0283 -fanfares.nostr1.com,40.7057,-74.0136 -freeben666.fr,43.7221,7.15296 -strfry.elswa-dev.online,50.1109,8.68213 -relay.cypherflow.ai,48.8566,2.35222 -nostr.plantroon.com,50.1013,8.62643 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.primal.net,43.6532,-79.3832 -premium.primal.net,43.6532,-79.3832 -bcast.seutoba.com.br,43.6532,-79.3832 -relay.nostr.band,60.1699,24.9384 -relay.jmoose.rocks,60.1699,24.9384 -shu04.shugur.net,25.2604,55.2989 -espelho.girino.org,43.6532,-79.3832 +purpura.cloud,43.6532,-79.3832 +yabu.me,35.6092,139.73 +no.str.cr,9.92857,-84.0528 +prl.plus,56.9677,24.1056 +nostr.oxtr.dev,50.4754,12.3683 +nostr.spicyz.io,43.6532,-79.3832 +wot.nostr.party,36.1627,-86.7816 +relay.magiccity.live,25.8128,-80.2377 +khatru.nostrver.se,51.5792,4.58333 +relay.bullishbounty.com,43.6532,-79.3832 +shu01.shugur.net,21.4902,39.2246 From 0bd034b91647004a4bc9a00f10e3ed94661a1ef3 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 23 Nov 2025 06:22:51 +0000 Subject: [PATCH 11/24] Automated update of relay data - Sun Nov 23 06:22:51 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 501 +++++++++++++-------------- 1 file changed, 246 insertions(+), 255 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index 80f8293b7..a9f755f59 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,286 +1,277 @@ Relay URL,Latitude,Longitude -wot.brightbolt.net,47.6735,-116.781 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -relay.fountain.fm,39.0997,-94.5786 -relay.olas.app,50.4754,12.3683 -nostr.now,36.55,139.733 -relay.fundstr.me,42.3601,-71.0589 +relayone.soundhsa.com,33.1384,-95.6011 +nostr.overmind.lol,43.6532,-79.3832 +ribo.us.nostria.app,41.5868,-93.625 +relay.siamdev.cc,13.9178,100.424 +cyberspace.nostr1.com,40.7128,-74.006 +relay.holzeis.me,43.6532,-79.3832 +nr.yay.so,46.2126,6.1154 +nostr.davidebtc.me,50.1109,8.68213 +relay.nostrhub.tech,49.0291,8.35696 +relay.samt.st,40.8302,-74.1299 +nostr.lkjsxc.com,43.6532,-79.3832 +nostr.bond,50.1109,8.68213 +nostr.ovia.to,43.6532,-79.3832 +nostr.ps1829.com,33.8851,130.883 santo.iguanatech.net,40.8302,-74.1299 +premium.primal.net,43.6532,-79.3832 +alien.macneilmediagroup.com,43.6532,-79.3832 +slick.mjex.me,39.048,-77.4817 +relay01.lnfi.network,39.0997,-94.5786 +nostr-dev.wellorder.net,45.5201,-122.99 +relay.2nix.de,60.1699,24.9384 +relay.agorist.space,52.3734,4.89406 +nostr.4rs.nl,49.0291,8.35696 +yabu.me,35.6092,139.73 +relay.letsfo.com,51.098,17.0321 +adre.su,59.9311,30.3609 +relay.nostar.org,43.6532,-79.3832 +nostrelay.circum.space,52.3676,4.90414 +nostr-relay.nextblockvending.com,47.2343,-119.853 +relay.nuts.cash,34.0362,-118.443 +relayrs.notoshi.win,43.6532,-79.3832 +relay.illuminodes.com,47.6061,-122.333 +relay.sigit.io,50.4754,12.3683 +nostr.girino.org,43.6532,-79.3832 +nostr.thebiglake.org,32.71,-96.6745 +relay.wellorder.net,45.5201,-122.99 +relay-freeharmonypeople.space,38.7223,-9.13934 +wot.nostr.party,36.1627,-86.7816 +srtrelay.c-stellar.net,43.6532,-79.3832 +nostr.openhoofd.nl,51.9229,4.40833 +relay.fountain.fm,39.0997,-94.5786 +nostr.luisschwab.net,43.6532,-79.3832 +purplerelay.com,50.1109,8.68213 +wot.sebastix.social,51.5792,4.58333 +relay.ditto.pub,43.6532,-79.3832 nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.islandbitcoin.com,12.8498,77.6545 -nostr.azzamo.net,52.2633,21.0283 -wot.sudocarlos.com,51.5072,-0.127586 +relay.0xchat.com,1.35208,103.82 +dizzyspells.nostr1.com,40.7057,-74.0136 +nostr.hekster.org,37.3986,-121.964 +relay.nostrdice.com,-33.8688,151.209 +prl.plus,56.9677,24.1056 +a.nos.lol,50.4754,12.3683 +nostr.czas.top,50.1109,8.68213 +articles.layer3.news,37.3387,-121.885 nostr.spaceshell.xyz,43.6532,-79.3832 -nostr.red5d.dev,43.6532,-79.3832 -relay.guggero.org,47.3769,8.54169 -relay02.lnfi.network,39.0997,-94.5786 -relay.21e6.cz,50.7383,15.0648 -relay.orangepill.ovh,49.1689,-0.358841 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.nostrcheck.me,43.6532,-79.3832 -orangepiller.org,60.1699,24.9384 -relay.mattybs.lol,43.6532,-79.3832 -nostr.coincrowd.fund,39.0438,-77.4874 -nostr-02.uid.ovh,43.6532,-79.3832 -relay.zone667.com,60.1699,24.9384 -nostrcheck.me,43.6532,-79.3832 -nostr.chaima.info,51.223,6.78245 -relay.wavefunc.live,34.0362,-118.443 -relay.artx.market,43.652,-79.3633 -black.nostrcity.club,41.8781,-87.6298 -dev-nostr.bityacht.io,25.0797,121.234 -relay.nostrhub.tech,49.0291,8.35696 -relay.snort.social,43.6532,-79.3832 -espelho.girino.org,43.6532,-79.3832 -relay.nostr.place,32.7767,-96.797 -nostr.tadryanom.me,43.6532,-79.3832 +relay.chorus.community,50.1109,8.68213 +alienos.libretechsystems.xyz,55.4724,9.87335 +relay.tagayasu.xyz,43.6715,-79.38 +relay.nostrhub.fr,48.1045,11.6004 +relay.javi.space,43.4633,11.8796 +nostr.simplex.icu,50.8198,-1.08798 +nostr.oxtr.dev,50.4754,12.3683 +ynostr.yael.at,60.1699,24.9384 +relay.nostr.net,43.6532,-79.3832 +wot.nostr.place,30.2672,-97.7431 +relay.getsafebox.app,43.6532,-79.3832 +wot.tealeaf.dev,33.7488,-84.3877 +relay.dwadziesciajeden.pl,52.2297,21.0122 +relay.nostr.band,60.1699,24.9384 strfry.elswa-dev.online,50.1109,8.68213 -relay.nostriot.com,41.5695,-83.9786 -nostr.rblb.it,43.7094,10.6582 -nostr-relay.online,43.6532,-79.3832 -nostr.davidebtc.me,50.1109,8.68213 relay.hook.cafe,43.6532,-79.3832 -bcast.girino.org,43.6532,-79.3832 -theoutpost.life,64.1476,-21.9392 -shu02.shugur.net,21.4902,39.2246 -relay.illuminodes.com,47.6061,-122.333 -nostrelay.memory-art.xyz,43.6532,-79.3832 -nos.xmark.cc,50.6924,3.20113 -x.kojira.io,43.6532,-79.3832 -relay.trustroots.org,43.6532,-79.3832 -wheat.happytavern.co,43.6532,-79.3832 -satsage.xyz,37.3986,-121.964 +nostr-02.czas.top,53.471,9.88208 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +fanfares.nostr1.com,40.7057,-74.0136 +nostr.a2x.pub,22.3193,114.169 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +nostr.jerrynya.fun,31.2304,121.474 +nostr.chaima.info,51.223,6.78245 +relay.satlantis.io,32.8769,-80.0114 +relay.electriclifestyle.com,26.2897,-80.1293 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.guggero.org,47.3769,8.54169 +relay.nostrcheck.me,43.6532,-79.3832 relay.nostx.io,43.6532,-79.3832 -nostr.plantroon.com,50.1013,8.62643 -relay.agora.social,50.7383,15.0648 -nostr2.girino.org,43.6532,-79.3832 -vitor.nostr1.com,40.7128,-74.006 -relay-freeharmonypeople.space,38.7223,-9.13934 -relay.nostr.net,50.4754,12.3683 -nostr.bitcoiner.social,39.1585,-94.5728 -relay.puresignal.news,43.6532,-79.3832 -relay.freeplace.nl,52.3676,4.90414 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.uid.ovh,43.6532,-79.3832 -relay.stream.labs.h3.se,59.4016,17.9455 nostr.n7ekb.net,47.4941,-122.294 -relay.btcforplebs.com,43.6532,-79.3832 -relay.siamdev.cc,13.9178,100.424 -ribo.eu.nostria.app,52.3676,4.90414 -nostr-02.czas.top,53.471,9.88208 -relay.sigit.io,50.4754,12.3683 -relay.damus.io,43.6532,-79.3832 +relay.cosmicbolt.net,37.3986,-121.964 +espelho.girino.org,43.6532,-79.3832 +nostr-03.dorafactory.org,1.35208,103.82 +shu02.shugur.net,21.4902,39.2246 +relay.mostro.network,40.8302,-74.1299 +nostr.casa21.space,43.6532,-79.3832 +nostr-01.yakihonne.com,1.32123,103.695 relay.arx-ccn.com,50.4754,12.3683 -bitcoiner.social,39.1585,-94.5728 -nostr.agentcampfire.com,50.8933,6.05805 -relay.holzeis.me,43.6532,-79.3832 -nostr.notribe.net,40.8302,-74.1299 -wot.dtonon.com,43.6532,-79.3832 -relay.binaryrobot.com,43.6532,-79.3832 -relay.nostr.vet,52.6467,4.7395 -wot.basspistol.org,49.4521,11.0767 -wot.yesnostr.net,50.9871,2.12554 -nostr.blankfors.se,60.1699,24.9384 -relay.angor.io,48.1046,11.6002 -relay.coinos.io,43.6532,-79.3832 -relay.letsfo.com,51.098,17.0321 -nostr-relay.psfoundation.info,39.0438,-77.4874 -relay.dwadziesciajeden.pl,52.2297,21.0122 -nostr-02.yakihonne.com,1.32123,103.695 -nostr-relay.cbrx.io,37.7803,-122.39 -relay.nostr.band,60.1699,24.9384 -strfry.openhoofd.nl,51.9229,4.40833 +nostr.mikoshi.de,50.1109,8.68213 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +relay5.bitransfer.org,43.6532,-79.3832 nostr-01.uid.ovh,43.6532,-79.3832 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.etch.social,41.2619,-95.8608 -wot.utxo.one,43.6532,-79.3832 -nostr.rtvslawenia.com,49.4543,11.0746 -relay.2nix.de,60.1699,24.9384 -nostr.jerrynya.fun,31.2304,121.474 -relay.otherstuff.dev,43.6532,-79.3832 -nostr-relay.amethyst.name,39.0438,-77.4874 -relay.cosmicbolt.net,37.3986,-121.964 -ynostr.yael.at,60.1699,24.9384 -relay.hasenpfeffr.com,39.0438,-77.4874 -trizone.dev,1.35208,103.82 -nostr.camalolo.com,24.1469,120.684 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.thibautduchene.fr,43.6532,-79.3832 +relay.coinos.io,43.6532,-79.3832 +nostr.myshosholoza.co.za,52.3676,4.90414 relay.internationalright-wing.org,-22.5022,-48.7114 -relay.notoshi.win,14.2046,101.213 -nostr.satstralia.com,64.1476,-21.9392 -relay.nostar.org,43.6532,-79.3832 -relay.anmore.me,49.6735,-124.928 -dizzyspells.nostr1.com,40.7128,-74.006 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 -wot.dergigi.com,64.1476,-21.9392 -shu04.shugur.net,25.2604,55.2989 -relay.nuts.cash,34.0362,-118.443 -nostr.4rs.nl,49.0291,8.35696 -relay.nostrops.com,33.7584,-84.6375 -relay.0xchat.com,1.35208,103.82 -orangesync.tech,51.5072,-0.127586 -soloco.nl,43.6532,-79.3832 -nostr-relay.nextblockvending.com,47.2343,-119.853 -nostr.zoracle.org,45.6018,-121.185 -relay.wolfcoil.com,35.6092,139.73 -alien.macneilmediagroup.com,43.6532,-79.3832 -nostr.hifish.org,47.4043,8.57398 -relay.nostrdice.com,-33.8688,151.209 -relay.lumina.rocks,49.0291,8.35695 -nostr.88mph.life,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -relay.origin.land,35.6673,139.751 -r.bitcoinhold.net,43.6532,-79.3832 -relay.npubhaus.com,43.6532,-79.3832 -relay.divine.video,43.6532,-79.3832 +nostr.now,36.55,139.733 +nostr2.girino.org,43.6532,-79.3832 +relay.puresignal.news,43.6532,-79.3832 +wot.shaving.kiwi,43.6532,-79.3832 +nostream.breadslice.com,1.35208,103.82 +relay-rpi.edufeed.org,49.4521,11.0767 +relay.agora.social,50.7383,15.0648 +relay02.lnfi.network,39.0997,-94.5786 +relay.nostr.place,32.7767,-96.797 nostr.tac.lol,47.4748,-122.273 -premium.primal.net,43.6532,-79.3832 -strfry.bonsai.com,37.8715,-122.273 -relay.toastr.net,40.8054,-74.0241 -alienos.libretechsystems.xyz,55.4724,9.87335 -nostr.carroarmato0.be,50.9928,3.26317 -nos.lol,50.4754,12.3683 -relay.endfiat.money,43.6532,-79.3832 -temp.iris.to,43.6532,-79.3832 -relay.vrtmrz.net,43.6532,-79.3832 -adre.su,59.9311,30.3609 -relay.mostro.network,40.8302,-74.1299 -nostr.21crypto.ch,47.5356,8.73209 -purplerelay.com,50.1109,8.68213 -relay01.lnfi.network,39.0997,-94.5786 -relay.barine.co,43.6532,-79.3832 +ribo.af.nostria.app,-26.2041,28.0473 +relay.nostr.vet,52.6467,4.7395 +x.kojira.io,37.7803,-122.39 +nostrcheck.tnsor.network,43.6532,-79.3832 +relay.thebluepulse.com,49.4521,11.0767 +bcast.girino.org,43.6532,-79.3832 +relay.jeffg.fyi,43.6532,-79.3832 pyramid.fiatjaf.com,51.5072,-0.127586 -nostr.noones.com,50.1109,8.68213 -relay.chorus.community,50.1109,8.68213 +nostr.vulpem.com,49.4543,11.0746 +wot.soundhsa.com,33.1384,-95.6011 +relay.cypherflow.ai,48.8566,2.35222 relay03.lnfi.network,39.0997,-94.5786 -nostr.hekster.org,37.3986,-121.964 -relay.tagayasu.xyz,43.6715,-79.38 -nostr.bilthon.dev,25.8128,-80.2377 -nostr.lkjsxc.com,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -relay.usefusion.ai,38.7134,-78.1591 -relay.fr13nd5.com,52.5233,13.3426 -nostrcheck.tnsor.network,43.6532,-79.3832 +theoutpost.life,64.1476,-21.9392 +relay.basspistol.org,46.2044,6.14316 +purpura.cloud,43.6532,-79.3832 +nostr.satstralia.com,64.1476,-21.9392 offchain.pub,47.6743,-117.112 -relay.aloftus.io,34.0881,-118.379 -nostr.data.haus,50.4754,12.3683 +nostr.bilthon.dev,25.8128,-80.2377 +nos.xmark.cc,50.6924,3.20113 +relay.lightning.pub,39.0438,-77.4874 +divine.diy,43.6532,-79.3832 +relay04.lnfi.network,39.0997,-94.5786 +nostr.mom,50.4754,12.3683 +relay.thibautduchene.fr,43.6532,-79.3832 +relay.ngengine.org,43.6532,-79.3832 +soloco.nl,43.6532,-79.3832 +orangepiller.org,60.1699,24.9384 +relay.snort.social,53.3498,-6.26031 +relay.chakany.systems,43.6532,-79.3832 +nostr.zoracle.org,45.6018,-121.185 +relay1.nostrchat.io,60.1699,24.9384 +nostr-relay.psfoundation.info,39.0438,-77.4874 nostr.kalf.org,52.3676,4.90414 -nostr.0x7e.xyz,47.4988,8.72369 +nostr.azzamo.net,52.2633,21.0283 +nostr-02.yakihonne.com,1.32123,103.695 +relay.anmore.me,49.6735,-124.928 +black.nostrcity.club,41.8781,-87.6298 +freeben666.fr,43.7221,7.15296 +nostr.camalolo.com,24.1469,120.684 +bcast.seutoba.com.br,43.6532,-79.3832 relay.bitcoinveneto.org,64.1466,-21.9426 -nostr.czas.top,50.1109,8.68213 -nostr-relay.corb.net,38.8353,-104.822 -relay.libernet.app,43.6532,-79.3832 -relayone.soundhsa.com,33.1384,-95.6011 -slick.mjex.me,39.048,-77.4817 +relay.trustroots.org,43.6532,-79.3832 +shu05.shugur.net,48.8566,2.35222 +relay.damus.io,43.6532,-79.3832 +nostr.veladan.dev,43.6532,-79.3832 +relay.davidebtc.me,50.1109,8.68213 +relay.barine.co,43.6532,-79.3832 +nostr.rikmeijer.nl,50.4754,12.3683 +wot.utxo.one,43.6532,-79.3832 +relay.toastr.net,40.8054,-74.0241 +nostr.tadryanom.me,43.6532,-79.3832 +freelay.sovbit.host,64.1476,-21.9392 +relay.bullishbounty.com,43.6532,-79.3832 +wot.yesnostr.net,50.9871,2.12554 +khatru.nostrver.se,51.5792,4.58333 +nostr.data.haus,50.4754,12.3683 +wot.brightbolt.net,47.6735,-116.781 +relay.artx.market,43.652,-79.3633 nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -wot.nostr.place,30.2672,-97.7431 -nostr.mom,50.4754,12.3683 -relay.nostriches.club,43.6532,-79.3832 -nostr.stakey.net,52.3676,4.90414 -relay2.ngengine.org,43.6532,-79.3832 -nostr.coincards.com,53.5501,-113.469 -relay.stevennoack.de,37.79,-122.401 -nostr.thebiglake.org,32.71,-96.6745 -nostr.huszonegy.world,47.4979,19.0402 -relay.nostr.wirednet.jp,34.706,135.493 -nostr.girino.org,43.6532,-79.3832 -nostr.ovia.to,43.6532,-79.3832 nostr.tavux.tech,48.8575,2.35138 -relay.nostromo.social,49.4543,11.0746 -dev-relay.lnfi.network,39.0997,-94.5786 -fanfares.nostr1.com,40.7128,-74.006 -relay.primal.net,43.6532,-79.3832 -nostrelay.circum.space,52.3676,4.90414 -relay.cypherflow.ai,48.8566,2.35222 -relay.ditto.pub,43.6532,-79.3832 -ribo.af.nostria.app,-26.2041,28.0473 -relay.electriclifestyle.com,26.2897,-80.1293 -relay.mccormick.cx,52.3563,4.95714 -nostr-03.dorafactory.org,1.35208,103.82 -relay.satlantis.io,32.8769,-80.0114 nostr-pub.wellorder.net,45.5201,-122.99 -nostr.simplex.icu,50.8198,-1.08798 -hivetalk.nostr1.com,40.7057,-74.0136 -relay.lightning.pub,39.0438,-77.4874 -inbox.azzamo.net,52.2633,21.0283 -nostr.bond,50.1109,8.68213 -relay.thebluepulse.com,49.4521,11.0767 -relay.agorist.space,52.3734,4.89406 -relay.lifpay.me,1.35208,103.82 +relay.etch.social,41.2619,-95.8608 librerelay.aaroniumii.com,43.6532,-79.3832 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -ribo.us.nostria.app,41.5868,-93.625 -nostr.veladan.dev,43.6532,-79.3832 -relay.davidebtc.me,50.1109,8.68213 -strfry.felixzieger.de,50.1013,8.62643 -relay04.lnfi.network,39.0997,-94.5786 -relay.credenso.cafe,43.3601,-80.3127 +relay.npubhaus.com,43.6532,-79.3832 relay.nosto.re,51.5792,4.58333 +relay.libernet.app,37.7803,-122.39 +nostr.stakey.net,52.3676,4.90414 +nostr.notribe.net,40.8302,-74.1299 +nostr.noones.com,50.1109,8.68213 +nproxy.kristapsk.lv,60.1699,24.9384 +nostr.spicyz.io,43.6532,-79.3832 nostr-2.21crypto.ch,47.5356,8.73209 -articles.layer3.news,37.3387,-121.885 -relay.javi.space,43.4633,11.8796 -relay-rpi.edufeed.org,49.4521,11.0767 -shu05.shugur.net,48.8566,2.35222 +nostr.21crypto.ch,47.5356,8.73209 +relay.zone667.com,60.1699,24.9384 +nostr.sizzlewidget.website,38.9072,-77.0369 +relay.olas.app,50.4754,12.3683 +ribo.eu.nostria.app,52.3676,4.90414 +relay.mccormick.cx,52.3563,4.95714 +relay.hasenpfeffr.com,39.0438,-77.4874 +relay.bitcoindistrict.org,43.6532,-79.3832 relay.moinsen.com,50.4754,12.3683 -relay.getsafebox.app,43.6532,-79.3832 -relay5.bitransfer.org,43.6532,-79.3832 -relay.jeffg.fyi,43.6532,-79.3832 -relay.ngengine.org,43.6532,-79.3832 -relay.ru.ac.th,13.7584,100.622 -relayrs.notoshi.win,43.6532,-79.3832 -nostr.overmind.lol,37.7803,-122.39 nostr-relay.zimage.com,34.282,-118.439 +no.str.cr,9.92857,-84.0528 +wot.dergigi.com,64.1476,-21.9392 +fenrir-s.notoshi.win,43.6532,-79.3832 +relay.origin.land,35.6673,139.751 +nostr.night7.space,50.4754,12.3683 +relay.nostriches.club,43.6532,-79.3832 +relay.magiccity.live,25.8128,-80.2377 +shu01.shugur.net,21.4902,39.2246 +temp.iris.to,43.6532,-79.3832 +relay2.angor.io,48.1046,11.6002 +relay.primal.net,43.6532,-79.3832 +nostr.hifish.org,47.4043,8.57398 +nostr-relay.cbrx.io,37.7803,-122.39 relay-dev.satlantis.io,40.8302,-74.1299 -wot.soundhsa.com,33.1384,-95.6011 -ithurtswhenip.ee,51.223,6.78245 +strfry.felixzieger.de,50.1013,8.62643 +nostr.rblb.it,43.7094,10.6582 +orangesync.tech,51.5072,-0.127586 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 +strfry.bonsai.com,37.8715,-122.273 +relay.vrtmrz.net,43.6532,-79.3832 +nostr.snowbla.de,60.1699,24.9384 +relay.angor.io,48.1046,11.6002 +nostr.huszonegy.world,47.4979,19.0402 +relay.credenso.cafe,43.3601,-80.3127 +nostr.sathoarder.com,48.5734,7.75211 +relay.stream.labs.h3.se,59.4016,17.9455 +wot.sudocarlos.com,51.5072,-0.127586 +relayone.geektank.ai,18.2148,-63.0574 +r.bitcoinhold.net,43.6532,-79.3832 +bitcoiner.social,39.1585,-94.5728 +nostrelites.org,41.8781,-87.6298 strfry.shock.network,39.0438,-77.4874 -nostr.calitabby.net,39.9268,-75.0246 -wot.nostr.net,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 -relay.routstr.com,43.6532,-79.3832 -nostr.faultables.net,43.6532,-79.3832 -bcast.seutoba.com.br,43.6532,-79.3832 -cyberspace.nostr1.com,40.7128,-74.006 -nostr.night7.space,50.4754,12.3683 schnorr.me,43.6532,-79.3832 -nostream.breadslice.com,1.35208,103.82 -nostr.vulpem.com,49.4543,11.0746 +relay.wolfcoil.com,35.6092,139.73 +nostr.bitcoiner.social,39.1585,-94.5728 +nostrcheck.me,43.6532,-79.3832 +shu04.shugur.net,25.2604,55.2989 +nostr-verified.wellorder.net,45.5201,-122.99 +relay.nostriot.com,41.5695,-83.9786 +nostr-relay.online,43.6532,-79.3832 relay.bitcoinartclock.com,50.4754,12.3683 +portal-relay.pareto.space,49.0291,8.35696 +strfry.openhoofd.nl,51.9229,4.40833 +relay.wavefunc.live,34.0362,-118.443 +nostr.agentcampfire.com,50.8933,6.05805 +wot.dtonon.com,43.6532,-79.3832 +relay.evanverma.com,40.8302,-74.1299 +dev-nostr.bityacht.io,25.0797,121.234 +relay.fundstr.me,42.3601,-71.0589 +relay.uid.ovh,43.6532,-79.3832 +inbox.azzamo.net,52.2633,21.0283 +relay.usefusion.ai,38.7134,-78.1591 +wot.nostr.net,43.6532,-79.3832 +relay.wavlake.com,41.2619,-95.8608 +relay.divine.video,43.6532,-79.3832 +nostr.coincards.com,53.5501,-113.469 +wheat.happytavern.co,43.6532,-79.3832 +nostr.plantroon.com,50.1013,8.62643 +relay.binaryrobot.com,43.6532,-79.3832 +nostrelay.memory-art.xyz,43.6532,-79.3832 +ithurtswhenip.ee,51.223,6.78245 +relay.notoshi.win,13.3622,100.983 +nos.lol,50.4754,12.3683 +relay.nostr.wirednet.jp,34.706,135.493 +nostr.coincrowd.fund,39.0438,-77.4874 +relay.orangepill.ovh,49.1689,-0.358841 +nostr.0x7e.xyz,47.4988,8.72369 relay.degmods.com,50.4754,12.3683 -freeben666.fr,43.7221,7.15296 -nostr.openhoofd.nl,51.9229,4.40833 -nostr.casa21.space,43.6532,-79.3832 -nostr.myshosholoza.co.za,52.3676,4.90414 -nostr.lostr.space,43.6532,-79.3832 -nostr-01.yakihonne.com,1.32123,103.695 -nostr.rikmeijer.nl,50.4754,12.3683 -fenrir-s.notoshi.win,43.6532,-79.3832 -wot.shaving.kiwi,43.6532,-79.3832 -nostr.zenon.network,43.5009,-70.4428 -nproxy.kristapsk.lv,60.1699,24.9384 -relayb.uid.ovh,43.6532,-79.3832 -srtrelay.c-stellar.net,43.6532,-79.3832 -nostrelites.org,41.8781,-87.6298 -relay.goodmorningbitcoin.com,43.6532,-79.3832 +notemine.io,52.2026,20.9397 +relay.21e6.cz,50.7383,15.0648 +relay.islandbitcoin.com,12.8498,77.6545 +nostr.rtvslawenia.com,49.4543,11.0746 +nostr.blankfors.se,60.1699,24.9384 +nostr-relay.amethyst.name,39.0438,-77.4874 nostr-relay.xbytez.io,50.6924,3.20113 -nostr.sagaciousd.com,49.2827,-123.121 -relay.wellorder.net,45.5201,-122.99 -relay.basspistol.org,46.2044,6.14316 -nostr.luisschwab.net,43.6532,-79.3832 -relay.evanverma.com,40.8302,-74.1299 -nostr.sathoarder.com,48.5734,7.75211 -relay.samt.st,40.8302,-74.1299 -nostr.mikoshi.de,50.1109,8.68213 -a.nos.lol,50.4754,12.3683 -purpura.cloud,43.6532,-79.3832 -yabu.me,35.6092,139.73 -no.str.cr,9.92857,-84.0528 -prl.plus,56.9677,24.1056 -nostr.oxtr.dev,50.4754,12.3683 -nostr.spicyz.io,43.6532,-79.3832 -wot.nostr.party,36.1627,-86.7816 -relay.magiccity.live,25.8128,-80.2377 -khatru.nostrver.se,51.5792,4.58333 -relay.bullishbounty.com,43.6532,-79.3832 -shu01.shugur.net,21.4902,39.2246 +vitor.nostr1.com,40.7128,-74.006 +relay.fr13nd5.com,52.5233,13.3426 +nostr.88mph.life,60.1699,24.9384 +relay.routstr.com,43.6532,-79.3832 +dev-relay.lnfi.network,39.0997,-94.5786 +nostr.red5d.dev,43.6532,-79.3832 +nostr-relay.corb.net,38.8353,-104.822 +relay.lumina.rocks,49.0291,8.35695 +relay.mattybs.lol,43.6532,-79.3832 From 205cc3c8d32905ba61886f53294b5a271d416b68 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 30 Nov 2025 06:24:08 +0000 Subject: [PATCH 12/24] Automated update of relay data - Sun Nov 30 06:24:08 UTC 2025 --- app/src/main/assets/nostr_relays.csv | 497 +++++++++++++-------------- 1 file changed, 247 insertions(+), 250 deletions(-) diff --git a/app/src/main/assets/nostr_relays.csv b/app/src/main/assets/nostr_relays.csv index a9f755f59..1cb6d5e27 100644 --- a/app/src/main/assets/nostr_relays.csv +++ b/app/src/main/assets/nostr_relays.csv @@ -1,277 +1,274 @@ Relay URL,Latitude,Longitude -relayone.soundhsa.com,33.1384,-95.6011 -nostr.overmind.lol,43.6532,-79.3832 -ribo.us.nostria.app,41.5868,-93.625 -relay.siamdev.cc,13.9178,100.424 -cyberspace.nostr1.com,40.7128,-74.006 -relay.holzeis.me,43.6532,-79.3832 -nr.yay.so,46.2126,6.1154 -nostr.davidebtc.me,50.1109,8.68213 -relay.nostrhub.tech,49.0291,8.35696 -relay.samt.st,40.8302,-74.1299 -nostr.lkjsxc.com,43.6532,-79.3832 -nostr.bond,50.1109,8.68213 -nostr.ovia.to,43.6532,-79.3832 -nostr.ps1829.com,33.8851,130.883 -santo.iguanatech.net,40.8302,-74.1299 -premium.primal.net,43.6532,-79.3832 -alien.macneilmediagroup.com,43.6532,-79.3832 -slick.mjex.me,39.048,-77.4817 -relay01.lnfi.network,39.0997,-94.5786 -nostr-dev.wellorder.net,45.5201,-122.99 -relay.2nix.de,60.1699,24.9384 -relay.agorist.space,52.3734,4.89406 -nostr.4rs.nl,49.0291,8.35696 -yabu.me,35.6092,139.73 -relay.letsfo.com,51.098,17.0321 -adre.su,59.9311,30.3609 -relay.nostar.org,43.6532,-79.3832 -nostrelay.circum.space,52.3676,4.90414 -nostr-relay.nextblockvending.com,47.2343,-119.853 -relay.nuts.cash,34.0362,-118.443 -relayrs.notoshi.win,43.6532,-79.3832 -relay.illuminodes.com,47.6061,-122.333 -relay.sigit.io,50.4754,12.3683 nostr.girino.org,43.6532,-79.3832 -nostr.thebiglake.org,32.71,-96.6745 -relay.wellorder.net,45.5201,-122.99 -relay-freeharmonypeople.space,38.7223,-9.13934 -wot.nostr.party,36.1627,-86.7816 -srtrelay.c-stellar.net,43.6532,-79.3832 -nostr.openhoofd.nl,51.9229,4.40833 -relay.fountain.fm,39.0997,-94.5786 -nostr.luisschwab.net,43.6532,-79.3832 -purplerelay.com,50.1109,8.68213 -wot.sebastix.social,51.5792,4.58333 -relay.ditto.pub,43.6532,-79.3832 -nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 -relay.0xchat.com,1.35208,103.82 -dizzyspells.nostr1.com,40.7057,-74.0136 -nostr.hekster.org,37.3986,-121.964 -relay.nostrdice.com,-33.8688,151.209 -prl.plus,56.9677,24.1056 -a.nos.lol,50.4754,12.3683 -nostr.czas.top,50.1109,8.68213 -articles.layer3.news,37.3387,-121.885 +no.str.cr,9.92857,-84.0528 nostr.spaceshell.xyz,43.6532,-79.3832 -relay.chorus.community,50.1109,8.68213 -alienos.libretechsystems.xyz,55.4724,9.87335 -relay.tagayasu.xyz,43.6715,-79.38 -relay.nostrhub.fr,48.1045,11.6004 -relay.javi.space,43.4633,11.8796 -nostr.simplex.icu,50.8198,-1.08798 -nostr.oxtr.dev,50.4754,12.3683 -ynostr.yael.at,60.1699,24.9384 -relay.nostr.net,43.6532,-79.3832 -wot.nostr.place,30.2672,-97.7431 -relay.getsafebox.app,43.6532,-79.3832 -wot.tealeaf.dev,33.7488,-84.3877 -relay.dwadziesciajeden.pl,52.2297,21.0122 -relay.nostr.band,60.1699,24.9384 -strfry.elswa-dev.online,50.1109,8.68213 -relay.hook.cafe,43.6532,-79.3832 -nostr-02.czas.top,53.471,9.88208 -relay-testnet.k8s.layer3.news,37.3387,-121.885 -fanfares.nostr1.com,40.7057,-74.0136 -nostr.a2x.pub,22.3193,114.169 -nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 -nostr.jerrynya.fun,31.2304,121.474 -nostr.chaima.info,51.223,6.78245 -relay.satlantis.io,32.8769,-80.0114 -relay.electriclifestyle.com,26.2897,-80.1293 -chat-relay.zap-work.com,43.6532,-79.3832 -relay.guggero.org,47.3769,8.54169 -relay.nostrcheck.me,43.6532,-79.3832 -relay.nostx.io,43.6532,-79.3832 +relay.cypherflow.ai,48.8566,2.35222 +nostr.bond,50.1109,8.68213 nostr.n7ekb.net,47.4941,-122.294 +satsage.xyz,37.3986,-121.964 +nostr.camalolo.com,24.1469,120.684 +relay-dev.satlantis.io,40.8302,-74.1299 +wot.yesnostr.net,50.9871,2.12554 +nostr.0x7e.xyz,47.4988,8.72369 +nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 +relay.npubhaus.com,43.6532,-79.3832 +bcast.seutoba.com.br,43.6532,-79.3832 +relay.chorus.community,50.1109,8.68213 +nostr.mehdibekhtaoui.com,49.4939,-1.54813 relay.cosmicbolt.net,37.3986,-121.964 -espelho.girino.org,43.6532,-79.3832 -nostr-03.dorafactory.org,1.35208,103.82 -shu02.shugur.net,21.4902,39.2246 -relay.mostro.network,40.8302,-74.1299 -nostr.casa21.space,43.6532,-79.3832 -nostr-01.yakihonne.com,1.32123,103.695 -relay.arx-ccn.com,50.4754,12.3683 -nostr.mikoshi.de,50.1109,8.68213 -relay.goodmorningbitcoin.com,43.6532,-79.3832 +relay.basspistol.org,46.2044,6.14316 +nostr.sathoarder.com,48.5734,7.75211 +ithurtswhenip.ee,51.223,6.78245 +nostr.noones.com,50.1109,8.68213 +nostr.hekster.org,37.3986,-121.964 +khatru.nostrver.se,51.5792,4.58333 +relay.dwadziesciajeden.pl,52.2297,21.0122 +nostr.bitcoiner.social,39.1585,-94.5728 +relay01.lnfi.network,39.0997,-94.5786 +relay.lightning.pub,39.0438,-77.4874 +nostr.tac.lol,47.4748,-122.273 +relay.btcforplebs.com,43.6532,-79.3832 +wot.nostr.net,43.6532,-79.3832 +nostr2.girino.org,43.6532,-79.3832 relay5.bitransfer.org,43.6532,-79.3832 -nostr-01.uid.ovh,43.6532,-79.3832 -relay.coinos.io,43.6532,-79.3832 +nostr.88mph.life,60.1699,24.9384 +relay.degmods.com,50.4754,12.3683 +relay.ngengine.org,43.6532,-79.3832 +nostr.blankfors.se,60.1699,24.9384 +relay.usefusion.ai,38.7134,-78.1591 +inbox.azzamo.net,52.2633,21.0283 +nostr.plantroon.com,50.1013,8.62643 +nostr.hifish.org,47.4043,8.57398 +strfry.openhoofd.nl,51.9229,4.40833 +nostr.night7.space,50.4754,12.3683 +nostr.red5d.dev,43.6532,-79.3832 +relay.siamdev.cc,13.9178,100.424 +nostr.calitabby.net,39.9268,-75.0246 +nostr-relay.corb.net,38.8353,-104.822 nostr.myshosholoza.co.za,52.3676,4.90414 -relay.internationalright-wing.org,-22.5022,-48.7114 -nostr.now,36.55,139.733 -nostr2.girino.org,43.6532,-79.3832 -relay.puresignal.news,43.6532,-79.3832 -wot.shaving.kiwi,43.6532,-79.3832 -nostream.breadslice.com,1.35208,103.82 +relay.bitcoinartclock.com,50.4754,12.3683 +nostr.kalf.org,52.3676,4.90414 relay-rpi.edufeed.org,49.4521,11.0767 -relay.agora.social,50.7383,15.0648 -relay02.lnfi.network,39.0997,-94.5786 -relay.nostr.place,32.7767,-96.797 -nostr.tac.lol,47.4748,-122.273 +relay.guggero.org,47.3769,8.54169 +purpura.cloud,43.6532,-79.3832 +vitor.nostr1.com,40.7128,-74.006 +nostr.casa21.space,43.6532,-79.3832 +relay.wavefunc.live,34.0362,-118.443 +nostr.notribe.net,40.8302,-74.1299 +relay.fr13nd5.com,52.5233,13.3426 +cyberspace.nostr1.com,40.7057,-74.0136 +nostrcheck.me,43.6532,-79.3832 +relay2.angor.io,48.1046,11.6002 +shu01.shugur.net,21.4902,39.2246 +nostr.veladan.dev,43.6532,-79.3832 +relay.minibolt.info,43.6532,-79.3832 +relay.toastr.net,40.8054,-74.0241 +relay-freeharmonypeople.space,38.7223,-9.13934 +nostr.21crypto.ch,47.5356,8.73209 +wot.dtonon.com,43.6532,-79.3832 +relay.goodmorningbitcoin.com,43.6532,-79.3832 +relay.anmore.me,49.6735,-124.928 +relay03.lnfi.network,39.0997,-94.5786 ribo.af.nostria.app,-26.2041,28.0473 -relay.nostr.vet,52.6467,4.7395 -x.kojira.io,37.7803,-122.39 -nostrcheck.tnsor.network,43.6532,-79.3832 -relay.thebluepulse.com,49.4521,11.0767 +nostream.breadslice.com,1.35208,103.82 +relay.nostr.nisshiee.org,37.3387,-121.885 +relay.thibautduchene.fr,43.6532,-79.3832 +relay.nostrhub.tech,49.0291,8.35696 +relay2.ngengine.org,43.6532,-79.3832 +relay.javi.space,43.4633,11.8796 +nostr-01.yakihonne.com,1.32123,103.695 +nostr-relay.cbrx.io,43.6532,-79.3832 +relay.bitcoinveneto.org,64.1466,-21.9426 +librerelay.aaroniumii.com,43.6532,-79.3832 +nostr-relay.zimage.com,34.282,-118.439 +strfry.shock.network,39.0438,-77.4874 +portal-relay.pareto.space,49.0291,8.35696 +wot.sudocarlos.com,51.5072,-0.127586 +freeben666.fr,43.7221,7.15296 +shu02.shugur.net,21.4902,39.2246 +nos.xmark.cc,50.6924,3.20113 +dev-relay.lnfi.network,39.0997,-94.5786 +relay.nuts.cash,34.0362,-118.443 bcast.girino.org,43.6532,-79.3832 -relay.jeffg.fyi,43.6532,-79.3832 -pyramid.fiatjaf.com,51.5072,-0.127586 -nostr.vulpem.com,49.4543,11.0746 -wot.soundhsa.com,33.1384,-95.6011 -relay.cypherflow.ai,48.8566,2.35222 -relay03.lnfi.network,39.0997,-94.5786 +wot.dergigi.com,64.1476,-21.9392 +wot.brightbolt.net,47.6735,-116.781 theoutpost.life,64.1476,-21.9392 -relay.basspistol.org,46.2044,6.14316 -purpura.cloud,43.6532,-79.3832 -nostr.satstralia.com,64.1476,-21.9392 -offchain.pub,47.6743,-117.112 -nostr.bilthon.dev,25.8128,-80.2377 -nos.xmark.cc,50.6924,3.20113 -relay.lightning.pub,39.0438,-77.4874 -divine.diy,43.6532,-79.3832 -relay04.lnfi.network,39.0997,-94.5786 -nostr.mom,50.4754,12.3683 -relay.thibautduchene.fr,43.6532,-79.3832 -relay.ngengine.org,43.6532,-79.3832 -soloco.nl,43.6532,-79.3832 -orangepiller.org,60.1699,24.9384 -relay.snort.social,53.3498,-6.26031 +relay.nostr.band,60.1699,24.9384 +ribo.eu.nostria.app,52.3676,4.90414 +relayone.geektank.ai,18.2148,-63.0574 +nos.lol,50.4754,12.3683 +r.bitcoinhold.net,43.6532,-79.3832 +relay.0xchat.com,1.35208,103.82 +relay.routstr.com,43.6532,-79.3832 +relay.zone667.com,60.1699,24.9384 +relay.bullishbounty.com,43.6532,-79.3832 +relay.puresignal.news,43.6532,-79.3832 +nostr.4rs.nl,49.0291,8.35696 +nostr-relay-1.trustlessenterprise.com,43.6532,-79.3832 +relay.mccormick.cx,52.3563,4.95714 +relay.agora.social,50.7383,15.0648 +nostr.lkjsxc.com,43.6532,-79.3832 +nostr.tadryanom.me,43.6532,-79.3832 +relay.etch.social,41.2619,-95.8608 +nproxy.kristapsk.lv,60.1699,24.9384 +wot.tealeaf.dev,33.7488,-84.3877 +relay.jmoose.rocks,60.1699,24.9384 +relay.lumina.rocks,49.0291,8.35695 +nostrelay.circum.space,52.3676,4.90414 +relay.stream.labs.h3.se,59.4016,17.9455 +simplex.icu,50.8198,-1.08798 relay.chakany.systems,43.6532,-79.3832 -nostr.zoracle.org,45.6018,-121.185 -relay1.nostrchat.io,60.1699,24.9384 +relay.vrtmrz.net,43.6532,-79.3832 +fanfares.nostr1.com,40.7128,-74.006 +bitsat.molonlabe.holdings,51.4012,-1.3147 +premium.primal.net,43.6532,-79.3832 +relay.artx.market,43.652,-79.3633 +articles.layer3.news,37.3387,-121.885 +ribo.us.nostria.app,41.5868,-93.625 +nostr.davidebtc.me,50.1109,8.68213 +nostr.now,36.55,139.733 nostr-relay.psfoundation.info,39.0438,-77.4874 -nostr.kalf.org,52.3676,4.90414 +chat-relay.zap-work.com,43.6532,-79.3832 +relay.getsafebox.app,43.6532,-79.3832 +orangesync.tech,51.5072,-0.127586 +dev-nostr.bityacht.io,25.0797,121.234 +relay.nostriot.com,41.5695,-83.9786 +nostr.zoracle.org,45.6018,-121.185 +nostr.simplex.icu,50.8198,-1.08798 +relay.evanverma.com,40.8302,-74.1299 +wot.sebastix.social,51.5792,4.58333 nostr.azzamo.net,52.2633,21.0283 -nostr-02.yakihonne.com,1.32123,103.695 -relay.anmore.me,49.6735,-124.928 -black.nostrcity.club,41.8781,-87.6298 -freeben666.fr,43.7221,7.15296 -nostr.camalolo.com,24.1469,120.684 -bcast.seutoba.com.br,43.6532,-79.3832 -relay.bitcoinveneto.org,64.1466,-21.9426 -relay.trustroots.org,43.6532,-79.3832 -shu05.shugur.net,48.8566,2.35222 -relay.damus.io,43.6532,-79.3832 -nostr.veladan.dev,43.6532,-79.3832 relay.davidebtc.me,50.1109,8.68213 +nostr-2.21crypto.ch,47.5356,8.73209 +relay.wolfcoil.com,35.6092,139.73 +relay.nostr.place,32.7767,-96.797 +srtrelay.c-stellar.net,43.6532,-79.3832 +relay.tagayasu.xyz,43.6715,-79.38 +ynostr.yael.at,60.1699,24.9384 +nostr-relay.online,43.6532,-79.3832 +strfry.elswa-dev.online,50.1109,8.68213 +santo.iguanatech.net,40.8302,-74.1299 +relay.angor.io,48.1046,11.6002 relay.barine.co,43.6532,-79.3832 -nostr.rikmeijer.nl,50.4754,12.3683 -wot.utxo.one,43.6532,-79.3832 -relay.toastr.net,40.8054,-74.0241 -nostr.tadryanom.me,43.6532,-79.3832 -freelay.sovbit.host,64.1476,-21.9392 -relay.bullishbounty.com,43.6532,-79.3832 -wot.yesnostr.net,50.9871,2.12554 -khatru.nostrver.se,51.5792,4.58333 +relay.bitcoindistrict.org,43.6532,-79.3832 +nostrcheck.tnsor.network,43.6532,-79.3832 nostr.data.haus,50.4754,12.3683 -wot.brightbolt.net,47.6735,-116.781 -relay.artx.market,43.652,-79.3633 -nostr-rs-relay-ishosta.phamthanh.me,43.6532,-79.3832 -nostr.tavux.tech,48.8575,2.35138 -nostr-pub.wellorder.net,45.5201,-122.99 -relay.etch.social,41.2619,-95.8608 -librerelay.aaroniumii.com,43.6532,-79.3832 -relay.npubhaus.com,43.6532,-79.3832 -relay.nosto.re,51.5792,4.58333 +shu04.shugur.net,25.2604,55.2989 +nostr-03.dorafactory.org,1.35208,103.82 +wot.utxo.one,43.6532,-79.3832 +relay04.lnfi.network,39.0997,-94.5786 +black.nostrcity.club,41.8781,-87.6298 +fenrir-s.notoshi.win,43.6532,-79.3832 +yabu.me,35.6092,139.73 +relay.coinos.io,43.6532,-79.3832 relay.libernet.app,37.7803,-122.39 +nostr-02.yakihonne.com,1.32123,103.695 +relay.nostx.io,43.6532,-79.3832 +nostr.luisschwab.net,43.6532,-79.3832 +relay.nosto.re,51.5792,4.58333 +relay.nostr.wirednet.jp,34.706,135.493 +nostr.openhoofd.nl,51.9229,4.40833 +nostr.bilthon.dev,25.8128,-80.2377 +divine.diy,43.6532,-79.3832 +nostr.jerrynya.fun,31.2304,121.474 +nostrelay.memory-art.xyz,43.6532,-79.3832 +kotukonostr.onrender.com,37.7775,-122.397 +nostr.rikmeijer.nl,50.4754,12.3683 +nostr.chaima.info,51.223,6.78245 +a.nos.lol,50.4754,12.3683 +relay.wavlake.com,41.2619,-95.8608 +relay.uid.ovh,43.6532,-79.3832 +relay.nostrcheck.me,43.6532,-79.3832 +nostr.faultables.net,43.6532,-79.3832 +relay.endfiat.money,43.6532,-79.3832 +nostr.coincards.com,53.5501,-113.469 +wot.nostr.place,30.2672,-97.7431 +bitcoiner.social,39.1585,-94.5728 +nostr.vulpem.com,49.4543,11.0746 +nostr.coincrowd.fund,39.0438,-77.4874 +relay.nostr.net,43.6532,-79.3832 +relay.nostrdice.com,-33.8688,151.209 +wot.shaving.kiwi,43.6532,-79.3832 +relay.nostr.vet,52.6467,4.7395 +relay.letsfo.com,51.098,17.0321 +shu05.shugur.net,48.8566,2.35222 nostr.stakey.net,52.3676,4.90414 -nostr.notribe.net,40.8302,-74.1299 -nostr.noones.com,50.1109,8.68213 -nproxy.kristapsk.lv,60.1699,24.9384 -nostr.spicyz.io,43.6532,-79.3832 -nostr-2.21crypto.ch,47.5356,8.73209 -nostr.21crypto.ch,47.5356,8.73209 -relay.zone667.com,60.1699,24.9384 -nostr.sizzlewidget.website,38.9072,-77.0369 -relay.olas.app,50.4754,12.3683 -ribo.eu.nostria.app,52.3676,4.90414 -relay.mccormick.cx,52.3563,4.95714 -relay.hasenpfeffr.com,39.0438,-77.4874 -relay.bitcoindistrict.org,43.6532,-79.3832 -relay.moinsen.com,50.4754,12.3683 -nostr-relay.zimage.com,34.282,-118.439 -no.str.cr,9.92857,-84.0528 -wot.dergigi.com,64.1476,-21.9392 -fenrir-s.notoshi.win,43.6532,-79.3832 -relay.origin.land,35.6673,139.751 -nostr.night7.space,50.4754,12.3683 -relay.nostriches.club,43.6532,-79.3832 -relay.magiccity.live,25.8128,-80.2377 -shu01.shugur.net,21.4902,39.2246 -temp.iris.to,43.6532,-79.3832 -relay2.angor.io,48.1046,11.6002 -relay.primal.net,43.6532,-79.3832 -nostr.hifish.org,47.4043,8.57398 -nostr-relay.cbrx.io,37.7803,-122.39 -relay-dev.satlantis.io,40.8302,-74.1299 +nostr.oxtr.dev,50.4754,12.3683 +nostr.overmind.lol,37.7803,-122.39 strfry.felixzieger.de,50.1013,8.62643 +relay.notoshi.win,13.3622,100.983 nostr.rblb.it,43.7094,10.6582 -orangesync.tech,51.5072,-0.127586 -nostr.mehdibekhtaoui.com,49.4939,-1.54813 +relay.magiccity.live,25.8128,-80.2377 +wot.soundhsa.com,33.1384,-95.6011 +relay.mattybs.lol,43.6532,-79.3832 +pyramid.fiatjaf.com,51.5072,-0.127586 +relay.21e6.cz,50.7383,15.0648 +relay.nsnip.io,60.1699,24.9384 +relay.nostriches.club,43.6532,-79.3832 +nostr.rtvslawenia.com,49.4543,11.0746 +relay-testnet.k8s.layer3.news,37.3387,-121.885 +nostr-relay.xbytez.io,50.6924,3.20113 +adre.su,59.9311,30.3609 +relay.sigit.io,50.4754,12.3683 +notemine.io,52.2026,20.9397 +relay.illuminodes.com,47.6061,-122.333 +relay.samt.st,40.8302,-74.1299 +nostr.czas.top,50.1109,8.68213 strfry.bonsai.com,37.8715,-122.273 -relay.vrtmrz.net,43.6532,-79.3832 -nostr.snowbla.de,60.1699,24.9384 -relay.angor.io,48.1046,11.6002 +relay.moinsen.com,50.4754,12.3683 nostr.huszonegy.world,47.4979,19.0402 -relay.credenso.cafe,43.3601,-80.3127 -nostr.sathoarder.com,48.5734,7.75211 -relay.stream.labs.h3.se,59.4016,17.9455 -wot.sudocarlos.com,51.5072,-0.127586 -relayone.geektank.ai,18.2148,-63.0574 -r.bitcoinhold.net,43.6532,-79.3832 -bitcoiner.social,39.1585,-94.5728 -nostrelites.org,41.8781,-87.6298 -strfry.shock.network,39.0438,-77.4874 -schnorr.me,43.6532,-79.3832 -relay.wolfcoil.com,35.6092,139.73 -nostr.bitcoiner.social,39.1585,-94.5728 -nostrcheck.me,43.6532,-79.3832 -shu04.shugur.net,25.2604,55.2989 -nostr-verified.wellorder.net,45.5201,-122.99 -relay.nostriot.com,41.5695,-83.9786 -nostr-relay.online,43.6532,-79.3832 -relay.bitcoinartclock.com,50.4754,12.3683 -portal-relay.pareto.space,49.0291,8.35696 -strfry.openhoofd.nl,51.9229,4.40833 -relay.wavefunc.live,34.0362,-118.443 -nostr.agentcampfire.com,50.8933,6.05805 -wot.dtonon.com,43.6532,-79.3832 -relay.evanverma.com,40.8302,-74.1299 -dev-nostr.bityacht.io,25.0797,121.234 -relay.fundstr.me,42.3601,-71.0589 -relay.uid.ovh,43.6532,-79.3832 -inbox.azzamo.net,52.2633,21.0283 -relay.usefusion.ai,38.7134,-78.1591 -wot.nostr.net,43.6532,-79.3832 -relay.wavlake.com,41.2619,-95.8608 +wot.nostr.party,36.1627,-86.7816 +nostr.mikoshi.de,50.1109,8.68213 +alien.macneilmediagroup.com,43.6532,-79.3832 +relay.agorist.space,52.3734,4.89406 +relay.mostro.network,40.8302,-74.1299 +relay.orangepill.ovh,49.1689,-0.358841 relay.divine.video,43.6532,-79.3832 -nostr.coincards.com,53.5501,-113.469 +relay.hasenpfeffr.com,39.0438,-77.4874 +nostr.ovia.to,43.6532,-79.3832 +purplerelay.com,50.1109,8.68213 +nostr.mom,50.4754,12.3683 +relay02.lnfi.network,39.0997,-94.5786 +orangepiller.org,60.1699,24.9384 wheat.happytavern.co,43.6532,-79.3832 -nostr.plantroon.com,50.1013,8.62643 +nostr.spicyz.io,43.6532,-79.3832 +relay.electriclifestyle.com,26.2897,-80.1293 +nostr.ps1829.com,33.8851,130.883 +schnorr.me,43.6532,-79.3832 +relay.damus.io,43.6532,-79.3832 +relay.internationalright-wing.org,-22.5022,-48.7114 +relay.fundstr.me,42.3601,-71.0589 +alienos.libretechsystems.xyz,55.4724,9.87335 +relay.origin.land,35.6673,139.751 +offchain.pub,47.6743,-117.112 +temp.iris.to,43.6532,-79.3832 +prl.plus,56.9677,24.1056 +nostr.snowbla.de,60.1699,24.9384 +relay.trustroots.org,43.6532,-79.3832 +relay.thebluepulse.com,49.4521,11.0767 +wot.sovbit.host,64.1466,-21.9426 +nostr-relay.amethyst.name,39.0438,-77.4874 +nostr.agentcampfire.com,50.8933,6.05805 +relay.nostrhub.fr,48.1045,11.6004 +nostr.thebiglake.org,32.71,-96.6745 +relay.snort.social,53.3498,-6.26031 relay.binaryrobot.com,43.6532,-79.3832 -nostrelay.memory-art.xyz,43.6532,-79.3832 -ithurtswhenip.ee,51.223,6.78245 -relay.notoshi.win,13.3622,100.983 -nos.lol,50.4754,12.3683 -relay.nostr.wirednet.jp,34.706,135.493 -nostr.coincrowd.fund,39.0438,-77.4874 -relay.orangepill.ovh,49.1689,-0.358841 -nostr.0x7e.xyz,47.4988,8.72369 -relay.degmods.com,50.4754,12.3683 -notemine.io,52.2026,20.9397 -relay.21e6.cz,50.7383,15.0648 +nostr-02.czas.top,53.471,9.88208 +relay.hook.cafe,43.6532,-79.3832 +relayrs.notoshi.win,43.6532,-79.3832 +nostr-rs-relay.dev.fedibtc.com,39.0438,-77.4874 +relayone.soundhsa.com,33.1384,-95.6011 relay.islandbitcoin.com,12.8498,77.6545 -nostr.rtvslawenia.com,49.4543,11.0746 -nostr.blankfors.se,60.1699,24.9384 -nostr-relay.amethyst.name,39.0438,-77.4874 -nostr-relay.xbytez.io,50.6924,3.20113 -vitor.nostr1.com,40.7128,-74.006 -relay.fr13nd5.com,52.5233,13.3426 -nostr.88mph.life,60.1699,24.9384 -relay.routstr.com,43.6532,-79.3832 -dev-relay.lnfi.network,39.0997,-94.5786 -nostr.red5d.dev,43.6532,-79.3832 -nostr-relay.corb.net,38.8353,-104.822 -relay.lumina.rocks,49.0291,8.35695 -relay.mattybs.lol,43.6532,-79.3832 +relay.arx-ccn.com,50.4754,12.3683 +x.kojira.io,37.7803,-122.39 +nostr-01.uid.ovh,43.6532,-79.3832 +relay.holzeis.me,43.6532,-79.3832 +relay.fountain.fm,39.0997,-94.5786 +relay.jeffg.fyi,43.6532,-79.3832 +relay.nostar.org,43.6532,-79.3832 +nostr-relay.nextblockvending.com,47.2343,-119.853 +soloco.nl,43.6532,-79.3832 +relay.credenso.cafe,43.3601,-80.3127 +relay.ru.ac.th,13.7584,100.622 +relay.ditto.pub,43.6532,-79.3832 +relay.satlantis.io,32.8769,-80.0114 From a8e97151e34fd41cc36f674c37f5b91ac8382529 Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:25:04 +0400 Subject: [PATCH 13/24] Chore: Remove unused `lifecycle-livedata-ktx` dependency This commit removes the `androidx.lifecycle:lifecycle-livedata-ktx` library from the project's dependencies. The `[libraries]` and `[bundles]` sections in `gradle/libs.versions.toml` have been updated to reflect this removal, as the dependency is no longer in use. --- gradle/libs.versions.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6dda224a..50737da5e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -73,7 +73,6 @@ androidx-compose-material-icons-extended = { module = "androidx.compose.material # Lifecycle androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycle-runtime" } -androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycle-runtime" } # Navigation androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation-compose" } @@ -137,7 +136,6 @@ compose = [ lifecycle = [ "androidx-lifecycle-runtime-ktx", "androidx-lifecycle-viewmodel-compose", - "androidx-lifecycle-livedata-ktx" ] cryptography = [ From 904f37704d5e7d887695f86520cc11ecd683df3a Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:31:18 +0400 Subject: [PATCH 14/24] Refactor: Remove unused `runtime-livedata` dependency --- gradle/libs.versions.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 50737da5e..8e0790a03 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -68,7 +68,6 @@ androidx-compose-ui-graphics = { module = "androidx.compose.ui:ui-graphics" } androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" } androidx-compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" } androidx-compose-material3 = { module = "androidx.compose.material3:material3" } -androidx-compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" } androidx-compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" } # Lifecycle @@ -129,7 +128,6 @@ compose = [ "androidx-compose-ui-graphics", "androidx-compose-ui-tooling-preview", "androidx-compose-material3", - "androidx-compose-runtime-livedata", "androidx-compose-material-icons-extended" ] From eb1d0bcb34a782aee5030abf74aa8d3418808d03 Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:53:59 +0400 Subject: [PATCH 15/24] Refactor: Migrate `LocationChannelManager` and `GeohashBookmarksStore` to StateFlow This commit refactors `LocationChannelManager` and `GeohashBookmarksStore` to use `StateFlow` instead of `LiveData` for managing and exposing their state. This change aligns with modern Android development practices and improves testability. **Key Changes:** - **`LocationChannelManager`**: - All `MutableLiveData` properties (`permissionState`, `availableChannels`, `selectedChannel`, etc.) have been replaced with `MutableStateFlow`. - Consumers now access these properties as `StateFlow`. - State updates have been changed from `postValue()` to direct `.value` assignments, simplifying thread management within the manager which already uses a dedicated coroutine scope. - **`GeohashBookmarksStore`**: - `bookmarks` and `bookmarkNames` are now exposed as `StateFlow` instead of `LiveData`. - State updates similarly use `.value` assignment. - **Nullability**: - The non-nullable nature of `StateFlow`'s value reduces the need for null-checks in both the manager classes and their consumers, leading to safer code. --- .../android/geohash/GeohashBookmarksStore.kt | 41 +++---- .../android/geohash/LocationChannelManager.kt | 107 +++++++++--------- 2 files changed, 72 insertions(+), 76 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/geohash/GeohashBookmarksStore.kt b/app/src/main/java/com/bitchat/android/geohash/GeohashBookmarksStore.kt index b498dd833..d4ccb9bf3 100644 --- a/app/src/main/java/com/bitchat/android/geohash/GeohashBookmarksStore.kt +++ b/app/src/main/java/com/bitchat/android/geohash/GeohashBookmarksStore.kt @@ -5,13 +5,14 @@ import android.location.Geocoder import android.location.Location import android.location.LocationManager import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import com.google.gson.Gson import com.google.gson.reflect.TypeToken import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import java.util.Locale /** @@ -46,11 +47,11 @@ class GeohashBookmarksStore private constructor(private val context: Context) { private val membership = mutableSetOf() - private val _bookmarks = MutableLiveData>(emptyList()) - val bookmarks: LiveData> = _bookmarks + private val _bookmarks = MutableStateFlow>(emptyList()) + val bookmarks: StateFlow> = _bookmarks.asStateFlow() - private val _bookmarkNames = MutableLiveData>(emptyMap()) - val bookmarkNames: LiveData> = _bookmarkNames + private val _bookmarkNames = MutableStateFlow>(emptyMap()) + val bookmarkNames: StateFlow> = _bookmarkNames.asStateFlow() // For throttling / preventing duplicate geocode lookups private val resolving = mutableSetOf() @@ -68,8 +69,8 @@ class GeohashBookmarksStore private constructor(private val context: Context) { val gh = normalize(geohash) if (gh.isEmpty() || membership.contains(gh)) return membership.add(gh) - val updated = listOf(gh) + (_bookmarks.value ?: emptyList()) - _bookmarks.postValue(updated) + val updated = listOf(gh) + (_bookmarks.value) + _bookmarks.value = updated persist(updated) // Resolve friendly name asynchronously resolveNameIfNeeded(gh) @@ -79,12 +80,12 @@ class GeohashBookmarksStore private constructor(private val context: Context) { val gh = normalize(geohash) if (!membership.contains(gh)) return membership.remove(gh) - val updated = (_bookmarks.value ?: emptyList()).filterNot { it == gh } - _bookmarks.postValue(updated) + val updated = (_bookmarks.value).filterNot { it == gh } + _bookmarks.value = updated // Remove stored name to avoid stale cache growth - val names = _bookmarkNames.value?.toMutableMap() ?: mutableMapOf() + val names = _bookmarkNames.value.toMutableMap() if (names.remove(gh) != null) { - _bookmarkNames.postValue(names) + _bookmarkNames.value = names persistNames(names) } persist(updated) @@ -108,7 +109,7 @@ class GeohashBookmarksStore private constructor(private val context: Context) { } } membership.clear(); membership.addAll(seen) - _bookmarks.postValue(ordered) + _bookmarks.value = ordered } } catch (e: Exception) { Log.e(TAG, "Failed to load bookmarks: ${e.message}") @@ -118,7 +119,7 @@ class GeohashBookmarksStore private constructor(private val context: Context) { if (!namesJson.isNullOrEmpty()) { val mapType = object : TypeToken>() {}.type val dict = gson.fromJson>(namesJson, mapType) - _bookmarkNames.postValue(dict) + _bookmarkNames.value = dict } } catch (e: Exception) { Log.e(TAG, "Failed to load bookmark names: ${e.message}") @@ -127,14 +128,14 @@ class GeohashBookmarksStore private constructor(private val context: Context) { private fun persist() { try { - val json = gson.toJson(_bookmarks.value ?: emptyList()) + val json = gson.toJson(_bookmarks.value) prefs.edit().putString(STORE_KEY, json).apply() } catch (_: Exception) {} } private fun persistNames() { try { - val json = gson.toJson(_bookmarkNames.value ?: emptyMap()) + val json = gson.toJson(_bookmarkNames.value) prefs.edit().putString(NAMES_STORE_KEY, json).apply() } catch (_: Exception) {} } @@ -144,8 +145,8 @@ class GeohashBookmarksStore private constructor(private val context: Context) { fun clearAll() { try { membership.clear() - _bookmarks.postValue(emptyList()) - _bookmarkNames.postValue(emptyMap()) + _bookmarks.value = emptyList() + _bookmarkNames.value = emptyMap() prefs.edit() .remove(STORE_KEY) .remove(NAMES_STORE_KEY) @@ -209,9 +210,9 @@ class GeohashBookmarksStore private constructor(private val context: Context) { } if (!name.isNullOrEmpty()) { - val current = _bookmarkNames.value?.toMutableMap() ?: mutableMapOf() + val current = _bookmarkNames.value.toMutableMap() current[gh] = name - _bookmarkNames.postValue(current) + _bookmarkNames.value = current persistNames(current) } } catch (e: Exception) { diff --git a/app/src/main/java/com/bitchat/android/geohash/LocationChannelManager.kt b/app/src/main/java/com/bitchat/android/geohash/LocationChannelManager.kt index b8da1fee3..9c18a859d 100644 --- a/app/src/main/java/com/bitchat/android/geohash/LocationChannelManager.kt +++ b/app/src/main/java/com/bitchat/android/geohash/LocationChannelManager.kt @@ -10,12 +10,12 @@ import android.location.LocationManager import android.os.Bundle import android.util.Log import androidx.core.app.ActivityCompat -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.* import java.util.* import com.google.gson.Gson import com.google.gson.JsonSyntaxException +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow /** * Manages location permissions, one-shot location retrieval, and computing geohash channels. @@ -53,28 +53,26 @@ class LocationChannelManager private constructor(private val context: Context) { private var dataManager: com.bitchat.android.ui.DataManager? = null // Published state for UI bindings (matching iOS @Published properties) - private val _permissionState = MutableLiveData(PermissionState.NOT_DETERMINED) - val permissionState: LiveData = _permissionState + private val _permissionState = MutableStateFlow(PermissionState.NOT_DETERMINED) + val permissionState: StateFlow = _permissionState - private val _availableChannels = MutableLiveData>(emptyList()) - val availableChannels: LiveData> = _availableChannels + private val _availableChannels = MutableStateFlow>(emptyList()) + val availableChannels: StateFlow> = _availableChannels - private val _selectedChannel = MutableLiveData(ChannelID.Mesh) - val selectedChannel: LiveData = _selectedChannel + private val _selectedChannel = MutableStateFlow(ChannelID.Mesh) + val selectedChannel: StateFlow = _selectedChannel - private val _teleported = MutableLiveData(false) - val teleported: LiveData = _teleported + private val _teleported = MutableStateFlow(false) + val teleported: StateFlow = _teleported - private val _locationNames = MutableLiveData>(emptyMap()) - val locationNames: LiveData> = _locationNames + private val _locationNames = MutableStateFlow>(emptyMap()) + val locationNames: StateFlow> = _locationNames - // Add a new LiveData property to indicate when location is being fetched - private val _isLoadingLocation = MutableLiveData(false) - val isLoadingLocation: LiveData = _isLoadingLocation + private val _isLoadingLocation = MutableStateFlow(false) + val isLoadingLocation: StateFlow = _isLoadingLocation - // Add a new LiveData property to track if location services are enabled by user - private val _locationServicesEnabled = MutableLiveData(false) - val locationServicesEnabled: LiveData = _locationServicesEnabled + private val _locationServicesEnabled = MutableStateFlow(false) + val locationServicesEnabled: StateFlow = _locationServicesEnabled init { updatePermissionState() @@ -102,15 +100,15 @@ class LocationChannelManager private constructor(private val context: Context) { when (getCurrentPermissionStatus()) { PermissionState.NOT_DETERMINED -> { Log.d(TAG, "Permission not determined - user needs to grant in app settings") - _permissionState.postValue(PermissionState.NOT_DETERMINED) + _permissionState.value = PermissionState.NOT_DETERMINED } PermissionState.DENIED, PermissionState.RESTRICTED -> { Log.d(TAG, "Permission denied or restricted") - _permissionState.postValue(PermissionState.DENIED) + _permissionState.value = PermissionState.DENIED } PermissionState.AUTHORIZED -> { Log.d(TAG, "Permission authorized - requesting location") - _permissionState.postValue(PermissionState.AUTHORIZED) + _permissionState.value = PermissionState.AUTHORIZED requestOneShotLocation() } } @@ -180,7 +178,7 @@ class LocationChannelManager private constructor(private val context: Context) { lastLocation?.let { location -> when (channel) { is ChannelID.Mesh -> { - _teleported.postValue(false) + _teleported.value = false } is ChannelID.Location -> { val currentGeohash = Geohash.encode( @@ -189,7 +187,7 @@ class LocationChannelManager private constructor(private val context: Context) { precision = channel.channel.level.precision ) val isTeleportedNow = currentGeohash != channel.channel.geohash - _teleported.postValue(isTeleportedNow) + _teleported.value = isTeleportedNow Log.d(TAG, "Teleported (immediate recompute): $isTeleportedNow (current: $currentGeohash, selected: ${channel.channel.geohash})") } } @@ -201,7 +199,7 @@ class LocationChannelManager private constructor(private val context: Context) { */ fun setTeleported(teleported: Boolean) { Log.d(TAG, "Setting teleported status: $teleported") - _teleported.postValue(teleported) + _teleported.value = teleported } /** @@ -209,7 +207,7 @@ class LocationChannelManager private constructor(private val context: Context) { */ fun enableLocationServices() { Log.d(TAG, "enableLocationServices() called by user") - _locationServicesEnabled.postValue(true) + _locationServicesEnabled.value = true saveLocationServicesState(true) // If we have permission, start location operations @@ -223,15 +221,15 @@ class LocationChannelManager private constructor(private val context: Context) { */ fun disableLocationServices() { Log.d(TAG, "disableLocationServices() called by user") - _locationServicesEnabled.postValue(false) + _locationServicesEnabled.value = false saveLocationServicesState(false) // Stop any ongoing location operations endLiveRefresh() // Clear available channels when location is disabled - _availableChannels.postValue(emptyList()) - _locationNames.postValue(emptyMap()) + _availableChannels.value = emptyList() + _locationNames.value = emptyMap() // If user had a location channel selected, switch back to mesh if (_selectedChannel.value is ChannelID.Location) { @@ -243,7 +241,7 @@ class LocationChannelManager private constructor(private val context: Context) { * Check if location services are enabled by the user */ fun isLocationServicesEnabled(): Boolean { - return _locationServicesEnabled.value ?: false + return _locationServicesEnabled.value } // MARK: - Location Operations @@ -280,13 +278,13 @@ class LocationChannelManager private constructor(private val context: Context) { if (lastKnownLocation != null) { Log.d(TAG, "Using last known location: ${lastKnownLocation.latitude}, ${lastKnownLocation.longitude}") lastLocation = lastKnownLocation - _isLoadingLocation.postValue(false) // Make sure loading state is off + _isLoadingLocation.value = false // Make sure loading state is off computeChannels(lastKnownLocation) reverseGeocodeIfNeeded(lastKnownLocation) } else { Log.d(TAG, "No last known location available") // Set loading state to true so UI can show a spinner - _isLoadingLocation.postValue(true) + _isLoadingLocation.value = true // Request a fresh location only when we don't have a last known location Log.d(TAG, "Requesting fresh location...") @@ -294,7 +292,7 @@ class LocationChannelManager private constructor(private val context: Context) { } } catch (e: SecurityException) { Log.e(TAG, "Security exception requesting location: ${e.message}") - _isLoadingLocation.postValue(false) // Turn off loading state on error + _isLoadingLocation.value = false // Turn off loading state on error updatePermissionState() } } @@ -308,7 +306,7 @@ class LocationChannelManager private constructor(private val context: Context) { reverseGeocodeIfNeeded(location) // Update loading state to indicate we have a location now - _isLoadingLocation.postValue(false) + _isLoadingLocation.value = false // Remove this listener after getting the update try { @@ -322,13 +320,13 @@ class LocationChannelManager private constructor(private val context: Context) { // Request a fresh location update using getCurrentLocation instead of continuous updates private fun requestFreshLocation() { if (!hasLocationPermission()) { - _isLoadingLocation.postValue(false) // Turn off loading state if no permission + _isLoadingLocation.value = false // Turn off loading state if no permission return } try { // Set loading state to true to indicate we're actively trying to get a location - _isLoadingLocation.postValue(true) + _isLoadingLocation.value = true // Try common providers in order of preference val providers = listOf( @@ -358,7 +356,7 @@ class LocationChannelManager private constructor(private val context: Context) { Log.w(TAG, "Received null location from getCurrentLocation") } // Update loading state to indicate we have a location now - _isLoadingLocation.postValue(false) + _isLoadingLocation.value = false } ) } else { @@ -378,14 +376,14 @@ class LocationChannelManager private constructor(private val context: Context) { // If no provider was available, turn off loading state if (!providerFound) { Log.w(TAG, "No location providers available") - _isLoadingLocation.postValue(false) + _isLoadingLocation.value = false } } catch (e: SecurityException) { Log.e(TAG, "Security exception requesting location: ${e.message}") - _isLoadingLocation.postValue(false) // Turn off loading state on error + _isLoadingLocation.value = false // Turn off loading state on error } catch (e: Exception) { Log.e(TAG, "Error requesting location: ${e.message}") - _isLoadingLocation.postValue(false) // Turn off loading state on error + _isLoadingLocation.value = false // Turn off loading state on error } } @@ -408,7 +406,7 @@ class LocationChannelManager private constructor(private val context: Context) { private fun updatePermissionState() { val newState = getCurrentPermissionStatus() Log.d(TAG, "Permission state updated to: $newState") - _permissionState.postValue(newState) + _permissionState.value = newState } private fun hasLocationPermission(): Boolean { @@ -433,13 +431,13 @@ class LocationChannelManager private constructor(private val context: Context) { Log.v(TAG, "Generated ${level.displayName}: $geohash") } - _availableChannels.postValue(result) + _availableChannels.value = result // Recompute teleported status based on current location vs selected channel val selectedChannelValue = _selectedChannel.value when (selectedChannelValue) { is ChannelID.Mesh -> { - _teleported.postValue(false) + _teleported.value = false } is ChannelID.Location -> { val currentGeohash = Geohash.encode( @@ -448,12 +446,9 @@ class LocationChannelManager private constructor(private val context: Context) { precision = selectedChannelValue.channel.level.precision ) val isTeleported = currentGeohash != selectedChannelValue.channel.geohash - _teleported.postValue(isTeleported) + _teleported.value = isTeleported Log.d(TAG, "Teleported status: $isTeleported (current: $currentGeohash, selected: ${selectedChannelValue.channel.geohash})") } - null -> { - _teleported.postValue(false) - } } } @@ -482,7 +477,7 @@ class LocationChannelManager private constructor(private val context: Context) { val names = namesByLevel(address) Log.d(TAG, "Reverse geocoding result: $names") - _locationNames.postValue(names) + _locationNames.value = names } else { Log.w(TAG, "No reverse geocoding results") } @@ -601,26 +596,26 @@ class LocationChannelManager private constructor(private val context: Context) { } if (channel != null) { - _selectedChannel.postValue(channel) + _selectedChannel.value = channel Log.d(TAG, "Restored persisted channel: ${channel.displayName}") } else { Log.d(TAG, "Could not restore persisted channel, defaulting to Mesh") - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh } } else { Log.w(TAG, "Invalid channel data format in persistence") - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh } } else { Log.d(TAG, "No persisted channel found, defaulting to Mesh") - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh } } catch (e: JsonSyntaxException) { Log.e(TAG, "Failed to parse persisted channel data: ${e.message}") - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh } catch (e: Exception) { Log.e(TAG, "Failed to load persisted channel: ${e.message}") - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh } } @@ -629,7 +624,7 @@ class LocationChannelManager private constructor(private val context: Context) { */ fun clearPersistedChannel() { dataManager?.clearLastGeohashChannel() - _selectedChannel.postValue(ChannelID.Mesh) + _selectedChannel.value = ChannelID.Mesh Log.d(TAG, "Cleared persisted channel selection") } @@ -653,11 +648,11 @@ class LocationChannelManager private constructor(private val context: Context) { private fun loadLocationServicesState() { try { val enabled = dataManager?.isLocationServicesEnabled() ?: false - _locationServicesEnabled.postValue(enabled) + _locationServicesEnabled.value = enabled Log.d(TAG, "Loaded location services state: $enabled") } catch (e: Exception) { Log.e(TAG, "Failed to load location services state: ${e.message}") - _locationServicesEnabled.postValue(false) + _locationServicesEnabled.value = false } } From fd9aae5de30819c2205baffd7da2165687c0ff77 Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:54:26 +0400 Subject: [PATCH 16/24] Refactor: Migrate from LiveData to StateFlow for Nostr components This commit replaces `LiveData` with `StateFlow` across core Nostr-related classes to align with modern Android architecture and improve state management. This change affects `NostrClient`, `NostrRelayManager`, `LocationNotesManager`, and `GeohashRepository`. **Key Changes:** - **`NostrClient`**: - `isInitialized` and `currentNpub` are now `StateFlow` instead of `LiveData`. - `relayConnectionStatus` and `relayInfo` now return `StateFlow` from `NostrRelayManager`. - **`NostrRelayManager`**: - Public properties `relays` and `isConnected` are migrated from `MutableLiveData` to `MutableStateFlow`. - Updates are now pushed using `.value` instead of `.postValue()`. - **`LocationNotesManager`**: - All public `LiveData` properties (`notes`, `geohash`, `initialLoadComplete`, `state`, `errorMessage`) are converted to `StateFlow`. - The class documentation is updated to reflect the use of `StateFlow`. - **`GeohashRepository`**: - Methods `updateGeohashPeople` and `updateReactiveParticipantCounts` now call `set...` methods on the `state` object instead of `post...`, reflecting the removal of `LiveData` from the underlying state management. --- .../android/nostr/GeohashRepository.kt | 7 ++--- .../android/nostr/LocationNotesManager.kt | 29 ++++++++++--------- .../com/bitchat/android/nostr/NostrClient.kt | 27 ++++++++--------- .../android/nostr/NostrRelayManager.kt | 23 ++++++++------- 4 files changed, 44 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/nostr/GeohashRepository.kt b/app/src/main/java/com/bitchat/android/nostr/GeohashRepository.kt index c72c8e679..822606c2a 100644 --- a/app/src/main/java/com/bitchat/android/nostr/GeohashRepository.kt +++ b/app/src/main/java/com/bitchat/android/nostr/GeohashRepository.kt @@ -2,7 +2,6 @@ package com.bitchat.android.nostr import android.app.Application import android.util.Log -import androidx.lifecycle.LiveData import com.bitchat.android.ui.ChatState import com.bitchat.android.ui.GeoPerson import java.util.Date @@ -112,7 +111,7 @@ class GeohashRepository( val geohash = currentGeohash if (geohash == null) { // Use postValue for thread safety - this can be called from background threads - state.postGeohashPeople(emptyList()) + state.setGeohashPeople(emptyList()) return } val cutoff = Date(System.currentTimeMillis() - 5 * 60 * 1000) @@ -143,7 +142,7 @@ class GeohashRepository( ) }.sortedByDescending { it.lastSeen } // Use postValue for thread safety - this can be called from background threads - state.postGeohashPeople(people) + state.setGeohashPeople(people) } fun updateReactiveParticipantCounts() { @@ -155,7 +154,7 @@ class GeohashRepository( counts[gh] = active } // Use postValue for thread safety - this can be called from background threads - state.postGeohashParticipantCounts(counts) + state.setGeohashParticipantCounts(counts) } fun putNostrKeyMapping(tempKeyOrPeer: String, pubkeyHex: String) { diff --git a/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt b/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt index 655a97834..dc1a8e85b 100644 --- a/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt +++ b/app/src/main/java/com/bitchat/android/nostr/LocationNotesManager.kt @@ -2,13 +2,14 @@ package com.bitchat.android.nostr import android.util.Log import androidx.annotation.MainThread -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow /** * Manages location notes (kind=1 text notes with geohash tags) - * iOS-compatible implementation with LiveData for Android UI binding + * iOS-compatible implementation with StateFlow for Android UI binding */ @MainThread class LocationNotesManager private constructor() { @@ -63,21 +64,21 @@ class LocationNotesManager private constructor() { NO_RELAYS } - // Published state (LiveData for Android) - private val _notes = MutableLiveData>(emptyList()) - val notes: LiveData> = _notes + // Published state (StateFlow for Android) + private val _notes = MutableStateFlow>(emptyList()) + val notes: StateFlow> = _notes.asStateFlow() - private val _geohash = MutableLiveData(null) - val geohash: LiveData = _geohash + private val _geohash = MutableStateFlow(null) + val geohash: StateFlow = _geohash.asStateFlow() - private val _initialLoadComplete = MutableLiveData(false) - val initialLoadComplete: LiveData = _initialLoadComplete + private val _initialLoadComplete = MutableStateFlow(false) + val initialLoadComplete: StateFlow = _initialLoadComplete.asStateFlow() - private val _state = MutableLiveData(State.IDLE) - val state: LiveData = _state + private val _state = MutableStateFlow(State.IDLE) + val state: StateFlow = _state.asStateFlow() - private val _errorMessage = MutableLiveData(null) - val errorMessage: LiveData = _errorMessage + private val _errorMessage = MutableStateFlow(null) + val errorMessage: StateFlow = _errorMessage.asStateFlow() // Private state private var subscriptionIDs: MutableMap = mutableMapOf() diff --git a/app/src/main/java/com/bitchat/android/nostr/NostrClient.kt b/app/src/main/java/com/bitchat/android/nostr/NostrClient.kt index 9e34c34c9..a48031574 100644 --- a/app/src/main/java/com/bitchat/android/nostr/NostrClient.kt +++ b/app/src/main/java/com/bitchat/android/nostr/NostrClient.kt @@ -2,9 +2,10 @@ package com.bitchat.android.nostr import android.content.Context import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.* +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow /** * High-level Nostr client that manages identity, connections, and messaging @@ -30,11 +31,11 @@ class NostrClient private constructor(private val context: Context) { private var currentIdentity: NostrIdentity? = null // Client state - private val _isInitialized = MutableLiveData() - val isInitialized: LiveData = _isInitialized + private val _isInitialized = MutableStateFlow(false) + val isInitialized: StateFlow = _isInitialized.asStateFlow() - private val _currentNpub = MutableLiveData() - val currentNpub: LiveData = _currentNpub + private val _currentNpub = MutableStateFlow(null) + val currentNpub: StateFlow = _currentNpub.asStateFlow() // Message processing private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob()) @@ -53,21 +54,21 @@ class NostrClient private constructor(private val context: Context) { currentIdentity = NostrIdentityBridge.getCurrentNostrIdentity(context) if (currentIdentity != null) { - _currentNpub.postValue(currentIdentity!!.npub) + _currentNpub.value = currentIdentity!!.npub Log.i(TAG, "✅ Nostr identity loaded: ${currentIdentity!!.getShortNpub()}") // Connect to relays relayManager.connect() - _isInitialized.postValue(true) + _isInitialized.value = true Log.i(TAG, "✅ Nostr client initialized successfully") } else { Log.e(TAG, "❌ Failed to load/create Nostr identity") - _isInitialized.postValue(false) + _isInitialized.value = false } } catch (e: Exception) { Log.e(TAG, "❌ Failed to initialize Nostr client: ${e.message}") - _isInitialized.postValue(false) + _isInitialized.value = false } } } @@ -78,7 +79,7 @@ class NostrClient private constructor(private val context: Context) { fun shutdown() { Log.d(TAG, "Shutting down Nostr client") relayManager.disconnect() - _isInitialized.postValue(false) + _isInitialized.value = false } /** @@ -227,12 +228,12 @@ class NostrClient private constructor(private val context: Context) { /** * Get relay connection status */ - val relayConnectionStatus: LiveData = relayManager.isConnected + val relayConnectionStatus: StateFlow = relayManager.isConnected /** * Get relay information */ - val relayInfo: LiveData> = relayManager.relays + val relayInfo: StateFlow> = relayManager.relays // MARK: - Private Methods diff --git a/app/src/main/java/com/bitchat/android/nostr/NostrRelayManager.kt b/app/src/main/java/com/bitchat/android/nostr/NostrRelayManager.kt index eb5806bb5..d44e6e0bb 100644 --- a/app/src/main/java/com/bitchat/android/nostr/NostrRelayManager.kt +++ b/app/src/main/java/com/bitchat/android/nostr/NostrRelayManager.kt @@ -1,9 +1,10 @@ package com.bitchat.android.nostr import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MutableLiveData import com.google.gson.Gson +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import com.google.gson.JsonArray import com.google.gson.JsonParser import kotlinx.coroutines.* @@ -72,11 +73,11 @@ class NostrRelayManager private constructor() { ) // Published state - private val _relays = MutableLiveData>() - val relays: LiveData> = _relays + private val _relays = MutableStateFlow>(emptyList()) + val relays: StateFlow> = _relays.asStateFlow() - private val _isConnected = MutableLiveData() - val isConnected: LiveData = _isConnected + private val _isConnected = MutableStateFlow(false) + val isConnected: StateFlow = _isConnected.asStateFlow() // Internal state private val relaysList = mutableListOf() @@ -226,14 +227,14 @@ class NostrRelayManager private constructor() { "wss://nostr21.com" ) relaysList.addAll(defaultRelayUrls.map { Relay(it) }) - _relays.postValue(relaysList.toList()) + _relays.value = relaysList.toList() updateConnectionStatus() Log.d(TAG, "✅ NostrRelayManager initialized with ${relaysList.size} default relays") } catch (e: Exception) { Log.e(TAG, "Failed to initialize NostrRelayManager: ${e.message}", e) // Initialize with empty list as fallback - _relays.postValue(emptyList()) - _isConnected.postValue(false) + _relays.value = emptyList() + _isConnected.value = false } } @@ -797,12 +798,12 @@ class NostrRelayManager private constructor() { } private fun updateRelaysList() { - _relays.postValue(relaysList.toList()) + _relays.value = relaysList.toList() } private fun updateConnectionStatus() { val connected = relaysList.any { it.isConnected } - _isConnected.postValue(connected) + _isConnected.value = connected } private fun generateSubscriptionId(): String { From 56998872ef4d219f69a7af9064b740e8fda9ea9c Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:55:24 +0400 Subject: [PATCH 17/24] Refactor: Migrate ChatState from LiveData to StateFlow This commit refactors the `ChatState`, `ChatViewModel`, and `GeohashViewModel` to use `StateFlow` instead of `LiveData` for managing and exposing UI state. This migration improves state management by leveraging modern coroutine-based flows. **Key Changes:** - **`ChatState.kt`**: - Replaced all `MutableLiveData` instances with `MutableStateFlow`. - Exposed state properties as `StateFlow` instead of `LiveData`. - Removed `MediatorLiveData` for computed properties (`hasUnreadChannels`, `hasUnreadPrivateMessages`) and replaced them with `Flow.combine` to create derivative `StateFlows`. - Simplified non-nullable `getters` to directly return the `.value` of the `StateFlows`. - Removed `postValue` helpers that are no longer necessary. - **`ChatViewModel.kt`**: - Updated all state properties to be `StateFlow`, reflecting the changes in `ChatState`. - **`GeohashViewModel.kt`**: - Changed state properties (`geohashPeople`, `geohashParticipantCounts`, etc.) from `LiveData` to `StateFlow`. - Replaced `observeForever` on `LiveData` from `LocationChannelManager` with `viewModelScope.launch` blocks that `.collect()` from the underlying flows. --- .../java/com/bitchat/android/ui/ChatState.kt | 227 +++++++++--------- .../com/bitchat/android/ui/ChatViewModel.kt | 68 +++--- .../bitchat/android/ui/GeohashViewModel.kt | 26 +- 3 files changed, 161 insertions(+), 160 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatState.kt b/app/src/main/java/com/bitchat/android/ui/ChatState.kt index e17c14943..15986e48e 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatState.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatState.kt @@ -1,10 +1,15 @@ package com.bitchat.android.ui import android.util.Log -import androidx.lifecycle.LiveData -import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.MutableLiveData import com.bitchat.android.model.BitchatMessage +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.stateIn /** * Centralized state definitions and data classes for the chat system @@ -24,168 +29,161 @@ data class CommandSuggestion( class ChatState { // Core messages and peer state - private val _messages = MutableLiveData>(emptyList()) - val messages: LiveData> = _messages + private val _messages = MutableStateFlow>(emptyList()) + val messages: StateFlow> = _messages.asStateFlow() - private val _connectedPeers = MutableLiveData>(emptyList()) - val connectedPeers: LiveData> = _connectedPeers + private val _connectedPeers = MutableStateFlow>(emptyList()) + val connectedPeers: StateFlow> = _connectedPeers.asStateFlow() - private val _nickname = MutableLiveData() - val nickname: LiveData = _nickname + private val _nickname = MutableStateFlow("") + val nickname: StateFlow = _nickname.asStateFlow() - private val _isConnected = MutableLiveData(false) - val isConnected: LiveData = _isConnected + private val _isConnected = MutableStateFlow(false) + val isConnected: StateFlow = _isConnected.asStateFlow() // Private chats - private val _privateChats = MutableLiveData>>(emptyMap()) - val privateChats: LiveData>> = _privateChats + private val _privateChats = MutableStateFlow>>(emptyMap()) + val privateChats: StateFlow>> = _privateChats.asStateFlow() - private val _selectedPrivateChatPeer = MutableLiveData(null) - val selectedPrivateChatPeer: LiveData = _selectedPrivateChatPeer + private val _selectedPrivateChatPeer = MutableStateFlow(null) + val selectedPrivateChatPeer: StateFlow = _selectedPrivateChatPeer.asStateFlow() - private val _unreadPrivateMessages = MutableLiveData>(emptySet()) - val unreadPrivateMessages: LiveData> = _unreadPrivateMessages + private val _unreadPrivateMessages = MutableStateFlow>(emptySet()) + val unreadPrivateMessages: StateFlow> = _unreadPrivateMessages.asStateFlow() // Channels - private val _joinedChannels = MutableLiveData>(emptySet()) - val joinedChannels: LiveData> = _joinedChannels + private val _joinedChannels = MutableStateFlow>(emptySet()) + val joinedChannels: StateFlow> = _joinedChannels.asStateFlow() - private val _currentChannel = MutableLiveData(null) - val currentChannel: LiveData = _currentChannel + private val _currentChannel = MutableStateFlow(null) + val currentChannel: StateFlow = _currentChannel.asStateFlow() - private val _channelMessages = MutableLiveData>>(emptyMap()) - val channelMessages: LiveData>> = _channelMessages + private val _channelMessages = MutableStateFlow>>(emptyMap()) + val channelMessages: StateFlow>> = _channelMessages.asStateFlow() - private val _unreadChannelMessages = MutableLiveData>(emptyMap()) - val unreadChannelMessages: LiveData> = _unreadChannelMessages + private val _unreadChannelMessages = MutableStateFlow>(emptyMap()) + val unreadChannelMessages: StateFlow> = _unreadChannelMessages.asStateFlow() - private val _passwordProtectedChannels = MutableLiveData>(emptySet()) - val passwordProtectedChannels: LiveData> = _passwordProtectedChannels + private val _passwordProtectedChannels = MutableStateFlow>(emptySet()) + val passwordProtectedChannels: StateFlow> = _passwordProtectedChannels.asStateFlow() - private val _showPasswordPrompt = MutableLiveData(false) - val showPasswordPrompt: LiveData = _showPasswordPrompt + private val _showPasswordPrompt = MutableStateFlow(false) + val showPasswordPrompt: StateFlow = _showPasswordPrompt.asStateFlow() - private val _passwordPromptChannel = MutableLiveData(null) - val passwordPromptChannel: LiveData = _passwordPromptChannel + private val _passwordPromptChannel = MutableStateFlow(null) + val passwordPromptChannel: StateFlow = _passwordPromptChannel.asStateFlow() // Sidebar state - private val _showSidebar = MutableLiveData(false) - val showSidebar: LiveData = _showSidebar + private val _showSidebar = MutableStateFlow(false) + val showSidebar: StateFlow = _showSidebar.asStateFlow() // Command autocomplete - private val _showCommandSuggestions = MutableLiveData(false) - val showCommandSuggestions: LiveData = _showCommandSuggestions + private val _showCommandSuggestions = MutableStateFlow(false) + val showCommandSuggestions: StateFlow = _showCommandSuggestions.asStateFlow() - private val _commandSuggestions = MutableLiveData>(emptyList()) - val commandSuggestions: LiveData> = _commandSuggestions + private val _commandSuggestions = MutableStateFlow>(emptyList()) + val commandSuggestions: StateFlow> = _commandSuggestions.asStateFlow() // Mention autocomplete - private val _showMentionSuggestions = MutableLiveData(false) - val showMentionSuggestions: LiveData = _showMentionSuggestions + private val _showMentionSuggestions = MutableStateFlow(false) + val showMentionSuggestions: StateFlow = _showMentionSuggestions.asStateFlow() - private val _mentionSuggestions = MutableLiveData>(emptyList()) - val mentionSuggestions: LiveData> = _mentionSuggestions + private val _mentionSuggestions = MutableStateFlow>(emptyList()) + val mentionSuggestions: StateFlow> = _mentionSuggestions.asStateFlow() // Favorites - private val _favoritePeers = MutableLiveData>(emptySet()) - val favoritePeers: LiveData> = _favoritePeers + private val _favoritePeers = MutableStateFlow>(emptySet()) + val favoritePeers: StateFlow> = _favoritePeers.asStateFlow() // Noise session states for peers (for reactive UI updates) - private val _peerSessionStates = MutableLiveData>(emptyMap()) - val peerSessionStates: LiveData> = _peerSessionStates + private val _peerSessionStates = MutableStateFlow>(emptyMap()) + val peerSessionStates: StateFlow> = _peerSessionStates.asStateFlow() // Peer fingerprint state for reactive favorites (for reactive UI updates) - private val _peerFingerprints = MutableLiveData>(emptyMap()) - val peerFingerprints: LiveData> = _peerFingerprints + private val _peerFingerprints = MutableStateFlow>(emptyMap()) + val peerFingerprints: StateFlow> = _peerFingerprints.asStateFlow() - private val _peerNicknames = MutableLiveData>(emptyMap()) - val peerNicknames: LiveData> = _peerNicknames + private val _peerNicknames = MutableStateFlow>(emptyMap()) + val peerNicknames: StateFlow> = _peerNicknames.asStateFlow() - private val _peerRSSI = MutableLiveData>(emptyMap()) - val peerRSSI: LiveData> = _peerRSSI + private val _peerRSSI = MutableStateFlow>(emptyMap()) + val peerRSSI: StateFlow> = _peerRSSI.asStateFlow() // Direct connection status per peer (for live UI updates) - private val _peerDirect = MutableLiveData>(emptyMap()) - val peerDirect: LiveData> = _peerDirect + private val _peerDirect = MutableStateFlow>(emptyMap()) + val peerDirect: StateFlow> = _peerDirect.asStateFlow() // peerIDToPublicKeyFingerprint REMOVED - fingerprints now handled centrally in PeerManager // Navigation state - private val _showAppInfo = MutableLiveData(false) - val showAppInfo: LiveData = _showAppInfo + private val _showAppInfo = MutableStateFlow(false) + val showAppInfo: StateFlow = _showAppInfo.asStateFlow() // Location channels state (for Nostr geohash features) - private val _selectedLocationChannel = MutableLiveData(com.bitchat.android.geohash.ChannelID.Mesh) - val selectedLocationChannel: LiveData = _selectedLocationChannel + private val _selectedLocationChannel = MutableStateFlow(com.bitchat.android.geohash.ChannelID.Mesh) + val selectedLocationChannel: StateFlow = _selectedLocationChannel.asStateFlow() - private val _isTeleported = MutableLiveData(false) - val isTeleported: LiveData = _isTeleported + private val _isTeleported = MutableStateFlow(false) + val isTeleported: StateFlow = _isTeleported.asStateFlow() // Geohash people state (iOS-compatible) - private val _geohashPeople = MutableLiveData>(emptyList()) - val geohashPeople: LiveData> = _geohashPeople - // For background thread updates by repositories/handlers in their own scopes - val geohashPeopleMutable: MutableLiveData> get() = _geohashPeople + private val _geohashPeople = MutableStateFlow>(emptyList()) + val geohashPeople: StateFlow> = _geohashPeople.asStateFlow() - - private val _teleportedGeo = MutableLiveData>(emptySet()) - val teleportedGeo: LiveData> = _teleportedGeo + private val _teleportedGeo = MutableStateFlow>(emptySet()) + val teleportedGeo: StateFlow> = _teleportedGeo.asStateFlow() // Geohash participant counts reactive state (for real-time location channel counts) - private val _geohashParticipantCounts = MutableLiveData>(emptyMap()) - val geohashParticipantCounts: LiveData> = _geohashParticipantCounts - - // Unread state computed properties - val hasUnreadChannels: MediatorLiveData = MediatorLiveData() - val hasUnreadPrivateMessages: MediatorLiveData = MediatorLiveData() + private val _geohashParticipantCounts = MutableStateFlow>(emptyMap()) + val geohashParticipantCounts: StateFlow> = _geohashParticipantCounts.asStateFlow() - init { - // Initialize unread state mediators - hasUnreadChannels.addSource(_unreadChannelMessages) { unreadMap -> - hasUnreadChannels.value = unreadMap.values.any { it > 0 } + // Unread state computed properties using Flow.combine + val hasUnreadChannels: StateFlow = _unreadChannelMessages + .combine(_unreadChannelMessages) { unreadMap, _ -> + unreadMap.values.any { it > 0 } } - - hasUnreadPrivateMessages.addSource(_unreadPrivateMessages) { unreadSet -> - hasUnreadPrivateMessages.value = unreadSet.isNotEmpty() + .stateIn( + scope = CoroutineScope(Dispatchers.Default), + started = SharingStarted.Eagerly, + initialValue = false + ) + + val hasUnreadPrivateMessages: StateFlow = _unreadPrivateMessages + .combine(_unreadPrivateMessages) { unreadSet, _ -> + unreadSet.isNotEmpty() } - } + .stateIn( + scope = CoroutineScope(Dispatchers.Default), + started = SharingStarted.Eagerly, + initialValue = false + ) // Getters for internal state access - fun getMessagesValue() = _messages.value ?: emptyList() - fun getConnectedPeersValue() = _connectedPeers.value ?: emptyList() + fun getMessagesValue() = _messages.value + fun getConnectedPeersValue() = _connectedPeers.value fun getNicknameValue() = _nickname.value - fun getPrivateChatsValue() = _privateChats.value ?: emptyMap() + fun getPrivateChatsValue() = _privateChats.value fun getSelectedPrivateChatPeerValue() = _selectedPrivateChatPeer.value - fun getUnreadPrivateMessagesValue() = _unreadPrivateMessages.value ?: emptySet() - fun getJoinedChannelsValue() = _joinedChannels.value ?: emptySet() - // Thread-safe posting helpers for background updates - fun postGeohashPeople(people: List) { - _geohashPeople.postValue(people) - } - - fun postGeohashParticipantCounts(counts: Map) { - _geohashParticipantCounts.postValue(counts) - } - - + fun getUnreadPrivateMessagesValue() = _unreadPrivateMessages.value + fun getJoinedChannelsValue() = _joinedChannels.value fun getCurrentChannelValue() = _currentChannel.value - fun getChannelMessagesValue() = _channelMessages.value ?: emptyMap() - fun getUnreadChannelMessagesValue() = _unreadChannelMessages.value ?: emptyMap() - fun getPasswordProtectedChannelsValue() = _passwordProtectedChannels.value ?: emptySet() - fun getShowPasswordPromptValue() = _showPasswordPrompt.value ?: false + fun getChannelMessagesValue() = _channelMessages.value + fun getUnreadChannelMessagesValue() = _unreadChannelMessages.value + fun getPasswordProtectedChannelsValue() = _passwordProtectedChannels.value + fun getShowPasswordPromptValue() = _showPasswordPrompt.value fun getPasswordPromptChannelValue() = _passwordPromptChannel.value - fun getShowSidebarValue() = _showSidebar.value ?: false - fun getShowCommandSuggestionsValue() = _showCommandSuggestions.value ?: false - fun getCommandSuggestionsValue() = _commandSuggestions.value ?: emptyList() - fun getShowMentionSuggestionsValue() = _showMentionSuggestions.value ?: false - fun getMentionSuggestionsValue() = _mentionSuggestions.value ?: emptyList() - fun getFavoritePeersValue() = _favoritePeers.value ?: emptySet() - fun getPeerSessionStatesValue() = _peerSessionStates.value ?: emptyMap() - fun getPeerFingerprintsValue() = _peerFingerprints.value ?: emptyMap() - fun getShowAppInfoValue() = _showAppInfo.value ?: false - fun getGeohashPeopleValue() = _geohashPeople.value ?: emptyList() - fun getTeleportedGeoValue() = _teleportedGeo.value ?: emptySet() - fun getGeohashParticipantCountsValue() = _geohashParticipantCounts.value ?: emptyMap() + fun getShowSidebarValue() = _showSidebar.value + fun getShowCommandSuggestionsValue() = _showCommandSuggestions.value + fun getCommandSuggestionsValue() = _commandSuggestions.value + fun getShowMentionSuggestionsValue() = _showMentionSuggestions.value + fun getMentionSuggestionsValue() = _mentionSuggestions.value + fun getFavoritePeersValue() = _favoritePeers.value + fun getPeerSessionStatesValue() = _peerSessionStates.value + fun getPeerFingerprintsValue() = _peerFingerprints.value + fun getShowAppInfoValue() = _showAppInfo.value + fun getGeohashPeopleValue() = _geohashPeople.value + fun getTeleportedGeoValue() = _teleportedGeo.value + fun getGeohashParticipantCountsValue() = _geohashParticipantCounts.value // Setters for state updates fun setMessages(messages: List) { @@ -197,7 +195,7 @@ class ChatState { } fun postTeleportedGeo(teleported: Set) { - _teleportedGeo.postValue(teleported) + _teleportedGeo.value = teleported } fun setNickname(nickname: String) { @@ -269,7 +267,7 @@ class ChatState { } fun setFavoritePeers(favorites: Set) { - val currentValue = _favoritePeers.value ?: emptySet() + val currentValue = _favoritePeers.value Log.d("ChatState", "setFavoritePeers called with ${favorites.size} favorites: $favorites") Log.d("ChatState", "Current value: $currentValue") Log.d("ChatState", "Values equal: ${currentValue == favorites}") @@ -278,8 +276,7 @@ class ChatState { // Always set the value - even if equal, this ensures observers are triggered _favoritePeers.value = favorites - Log.d("ChatState", "LiveData value after set: ${_favoritePeers.value}") - Log.d("ChatState", "LiveData has active observers: ${_favoritePeers.hasActiveObservers()}") + Log.d("ChatState", "StateFlow value after set: ${_favoritePeers.value}") } fun setPeerSessionStates(states: Map) { diff --git a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt index 74ab15c67..46a5cf434 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt @@ -4,8 +4,8 @@ import android.app.Application import android.util.Log import androidx.core.app.NotificationManagerCompat import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.StateFlow import com.bitchat.android.mesh.BluetoothMeshDelegate import com.bitchat.android.mesh.BluetoothMeshService import com.bitchat.android.model.BitchatMessage @@ -103,40 +103,40 @@ class ChatViewModel( - // Expose state through LiveData (maintaining the same interface) - val messages: LiveData> = state.messages - val connectedPeers: LiveData> = state.connectedPeers - val nickname: LiveData = state.nickname - val isConnected: LiveData = state.isConnected - val privateChats: LiveData>> = state.privateChats - val selectedPrivateChatPeer: LiveData = state.selectedPrivateChatPeer - val unreadPrivateMessages: LiveData> = state.unreadPrivateMessages - val joinedChannels: LiveData> = state.joinedChannels - val currentChannel: LiveData = state.currentChannel - val channelMessages: LiveData>> = state.channelMessages - val unreadChannelMessages: LiveData> = state.unreadChannelMessages - val passwordProtectedChannels: LiveData> = state.passwordProtectedChannels - val showPasswordPrompt: LiveData = state.showPasswordPrompt - val passwordPromptChannel: LiveData = state.passwordPromptChannel - val showSidebar: LiveData = state.showSidebar + // Expose state through StateFlow (maintaining the same interface) + val messages: StateFlow> = state.messages + val connectedPeers: StateFlow> = state.connectedPeers + val nickname: StateFlow = state.nickname + val isConnected: StateFlow = state.isConnected + val privateChats: StateFlow>> = state.privateChats + val selectedPrivateChatPeer: StateFlow = state.selectedPrivateChatPeer + val unreadPrivateMessages: StateFlow> = state.unreadPrivateMessages + val joinedChannels: StateFlow> = state.joinedChannels + val currentChannel: StateFlow = state.currentChannel + val channelMessages: StateFlow>> = state.channelMessages + val unreadChannelMessages: StateFlow> = state.unreadChannelMessages + val passwordProtectedChannels: StateFlow> = state.passwordProtectedChannels + val showPasswordPrompt: StateFlow = state.showPasswordPrompt + val passwordPromptChannel: StateFlow = state.passwordPromptChannel + val showSidebar: StateFlow = state.showSidebar val hasUnreadChannels = state.hasUnreadChannels val hasUnreadPrivateMessages = state.hasUnreadPrivateMessages - val showCommandSuggestions: LiveData = state.showCommandSuggestions - val commandSuggestions: LiveData> = state.commandSuggestions - val showMentionSuggestions: LiveData = state.showMentionSuggestions - val mentionSuggestions: LiveData> = state.mentionSuggestions - val favoritePeers: LiveData> = state.favoritePeers - val peerSessionStates: LiveData> = state.peerSessionStates - val peerFingerprints: LiveData> = state.peerFingerprints - val peerNicknames: LiveData> = state.peerNicknames - val peerRSSI: LiveData> = state.peerRSSI - val peerDirect: LiveData> = state.peerDirect - val showAppInfo: LiveData = state.showAppInfo - val selectedLocationChannel: LiveData = state.selectedLocationChannel - val isTeleported: LiveData = state.isTeleported - val geohashPeople: LiveData> = state.geohashPeople - val teleportedGeo: LiveData> = state.teleportedGeo - val geohashParticipantCounts: LiveData> = state.geohashParticipantCounts + val showCommandSuggestions: StateFlow = state.showCommandSuggestions + val commandSuggestions: StateFlow> = state.commandSuggestions + val showMentionSuggestions: StateFlow = state.showMentionSuggestions + val mentionSuggestions: StateFlow> = state.mentionSuggestions + val favoritePeers: StateFlow> = state.favoritePeers + val peerSessionStates: StateFlow> = state.peerSessionStates + val peerFingerprints: StateFlow> = state.peerFingerprints + val peerNicknames: StateFlow> = state.peerNicknames + val peerRSSI: StateFlow> = state.peerRSSI + val peerDirect: StateFlow> = state.peerDirect + val showAppInfo: StateFlow = state.showAppInfo + val selectedLocationChannel: StateFlow = state.selectedLocationChannel + val isTeleported: StateFlow = state.isTeleported + val geohashPeople: StateFlow> = state.geohashPeople + val teleportedGeo: StateFlow> = state.teleportedGeo + val geohashParticipantCounts: StateFlow> = state.geohashParticipantCounts init { // Note: Mesh service delegate is now set by MainActivity @@ -565,7 +565,7 @@ class ChatViewModel( private fun logCurrentFavoriteState() { Log.i("ChatViewModel", "=== CURRENT FAVORITE STATE ===") - Log.i("ChatViewModel", "LiveData favorite peers: ${favoritePeers.value}") + Log.i("ChatViewModel", "StateFlow favorite peers: ${favoritePeers.value}") Log.i("ChatViewModel", "DataManager favorite peers: ${dataManager.favoritePeers}") Log.i("ChatViewModel", "Peer fingerprints: ${privateChatManager.getAllPeerFingerprints()}") Log.i("ChatViewModel", "==============================") diff --git a/app/src/main/java/com/bitchat/android/ui/GeohashViewModel.kt b/app/src/main/java/com/bitchat/android/ui/GeohashViewModel.kt index 060bb84e7..52e00edf5 100644 --- a/app/src/main/java/com/bitchat/android/ui/GeohashViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/GeohashViewModel.kt @@ -3,7 +3,6 @@ package com.bitchat.android.ui import android.app.Application import android.util.Log import androidx.lifecycle.AndroidViewModel -import androidx.lifecycle.LiveData import androidx.lifecycle.viewModelScope import com.bitchat.android.nostr.GeohashMessageHandler import com.bitchat.android.nostr.GeohashRepository @@ -15,6 +14,7 @@ import com.bitchat.android.nostr.NostrSubscriptionManager import com.bitchat.android.nostr.PoWPreferenceManager import kotlinx.coroutines.Job import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import java.util.Date @@ -55,9 +55,9 @@ class GeohashViewModel( private var geoTimer: Job? = null private var locationChannelManager: com.bitchat.android.geohash.LocationChannelManager? = null - val geohashPeople: LiveData> = state.geohashPeople - val geohashParticipantCounts: LiveData> = state.geohashParticipantCounts - val selectedLocationChannel: LiveData = state.selectedLocationChannel + val geohashPeople: StateFlow> = state.geohashPeople + val geohashParticipantCounts: StateFlow> = state.geohashParticipantCounts + val selectedLocationChannel: StateFlow = state.selectedLocationChannel fun initialize() { subscriptionManager.connect() @@ -73,12 +73,16 @@ class GeohashViewModel( } try { locationChannelManager = com.bitchat.android.geohash.LocationChannelManager.getInstance(getApplication()) - locationChannelManager?.selectedChannel?.observeForever { channel -> - state.setSelectedLocationChannel(channel) - switchLocationChannel(channel) + viewModelScope.launch { + locationChannelManager?.selectedChannel?.collect { channel -> + state.setSelectedLocationChannel(channel) + switchLocationChannel(channel) + } } - locationChannelManager?.teleported?.observeForever { teleported -> - state.setIsTeleported(teleported) + viewModelScope.launch { + locationChannelManager?.teleported?.collect { teleported -> + state.setIsTeleported(teleported) + } } } catch (e: Exception) { Log.e(TAG, "Failed to initialize location channel state: ${e.message}") @@ -120,7 +124,7 @@ class GeohashViewModel( } try { val identity = NostrIdentityBridge.deriveIdentity(forGeohash = channel.geohash, context = getApplication()) - val teleported = state.isTeleported.value ?: false + val teleported = state.isTeleported.value val event = NostrProtocol.createEphemeralGeohashEvent(content, channel.geohash, identity, nickname, teleported) val relayManager = NostrRelayManager.getInstance(getApplication()) relayManager.sendEventToGeohash(event, channel.geohash, includeDefaults = false, nRelays = 5) @@ -231,7 +235,7 @@ class GeohashViewModel( try { val identity = NostrIdentityBridge.deriveIdentity(channel.channel.geohash, getApplication()) repo.updateParticipant(channel.channel.geohash, identity.publicKeyHex, Date()) - val teleported = state.isTeleported.value ?: false + val teleported = state.isTeleported.value if (teleported) repo.markTeleported(identity.publicKeyHex) } catch (e: Exception) { Log.w(TAG, "Failed identity setup: ${e.message}") } From ff71bab81fe681f910276b6bb50ea8916006d81a Mon Sep 17 00:00:00 2001 From: yet300 Date: Sun, 30 Nov 2025 12:59:26 +0400 Subject: [PATCH 18/24] Refactor: Migrate UI from LiveData to StateFlow This commit replaces `LiveData.observeAsState()` with `StateFlow.collectAsState()` across various UI components. This change aligns the codebase with modern Android development practices, using Kotlin Flows for reactive UI state management. No functional changes are intended. The primary goal is to remove the dependency on `androidx.lifecycle.livedata` from the composable functions. **Affected Components:** - `ChatScreen` - `SidebarComponents` - `ChatHeader` - `LocationChannelsSheet` - `LocationNotesSheet` - `LocationNotesButton` - `GeohashPeopleList` - `LocationNotesSheetPresenter` --- .../java/com/bitchat/android/ui/ChatHeader.kt | 33 ++++++++-------- .../java/com/bitchat/android/ui/ChatScreen.kt | 39 +++++++++---------- .../bitchat/android/ui/GeohashPeopleList.kt | 11 +++--- .../android/ui/LocationChannelsSheet.kt | 17 ++++---- .../bitchat/android/ui/LocationNotesButton.kt | 10 ++--- .../bitchat/android/ui/LocationNotesSheet.kt | 11 +++--- .../android/ui/LocationNotesSheetPresenter.kt | 8 ++-- .../bitchat/android/ui/SidebarComponents.kt | 29 +++++++------- 8 files changed, 76 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt index 4b1b22ca8..6b48ffdc3 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt @@ -14,7 +14,6 @@ import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -248,10 +247,10 @@ fun ChatHeaderContent( when { selectedPrivatePeer != null -> { // Private chat header - Fully reactive state tracking - val favoritePeers by viewModel.favoritePeers.observeAsState(emptySet()) - val peerFingerprints by viewModel.peerFingerprints.observeAsState(emptyMap()) - val peerSessionStates by viewModel.peerSessionStates.observeAsState(emptyMap()) - val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap()) + val favoritePeers by viewModel.favoritePeers.collectAsState() + val peerFingerprints by viewModel.peerFingerprints.collectAsState() + val peerSessionStates by viewModel.peerSessionStates.collectAsState() + val peerNicknames by viewModel.peerNicknames.collectAsState() // Reactive favorite computation - no more static lookups! val isFavorite = isFavoriteReactive( @@ -264,8 +263,8 @@ fun ChatHeaderContent( Log.d("ChatHeader", "Header recomposing: peer=$selectedPrivatePeer, isFav=$isFavorite, sessionState=$sessionState") // Pass geohash context and people for NIP-17 chat title formatting - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() - val geohashPeople by viewModel.geohashPeople.observeAsState(emptyList()) + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() + val geohashPeople by viewModel.geohashPeople.collectAsState() PrivateChatHeader( peerID = selectedPrivatePeer, @@ -523,18 +522,18 @@ private fun MainHeader( viewModel: ChatViewModel ) { val colorScheme = MaterialTheme.colorScheme - val connectedPeers by viewModel.connectedPeers.observeAsState(emptyList()) - val joinedChannels by viewModel.joinedChannels.observeAsState(emptySet()) - val hasUnreadChannels by viewModel.unreadChannelMessages.observeAsState(emptyMap()) - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.observeAsState(emptySet()) - val isConnected by viewModel.isConnected.observeAsState(false) - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() - val geohashPeople by viewModel.geohashPeople.observeAsState(emptyList()) + val connectedPeers by viewModel.connectedPeers.collectAsState() + val joinedChannels by viewModel.joinedChannels.collectAsState() + val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsState() + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() + val isConnected by viewModel.isConnected.collectAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() + val geohashPeople by viewModel.geohashPeople.collectAsState() // Bookmarks store for current geohash toggle (iOS parity) val context = androidx.compose.ui.platform.LocalContext.current val bookmarksStore = remember { com.bitchat.android.geohash.GeohashBookmarksStore.getInstance(context) } - val bookmarks by bookmarksStore.bookmarks.observeAsState(emptyList()) + val bookmarks by bookmarksStore.bookmarks.collectAsState() Row( modifier = Modifier.fillMaxWidth(), @@ -653,8 +652,8 @@ private fun LocationChannelsButton( val colorScheme = MaterialTheme.colorScheme // Get current channel selection from location manager - val selectedChannel by viewModel.selectedLocationChannel.observeAsState() - val teleported by viewModel.isTeleported.observeAsState(false) + val selectedChannel by viewModel.selectedLocationChannel.collectAsState() + val teleported by viewModel.isTeleported.collectAsState() val (badgeText, badgeColor) = when (selectedChannel) { is com.bitchat.android.geohash.ChannelID.Mesh -> { diff --git a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt index 6ec8bef7e..c287be920 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.Alignment @@ -41,22 +40,22 @@ import com.bitchat.android.ui.media.FullScreenImageViewer @Composable fun ChatScreen(viewModel: ChatViewModel) { val colorScheme = MaterialTheme.colorScheme - val messages by viewModel.messages.observeAsState(emptyList()) - val connectedPeers by viewModel.connectedPeers.observeAsState(emptyList()) - val nickname by viewModel.nickname.observeAsState("") - val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.observeAsState() - val currentChannel by viewModel.currentChannel.observeAsState() - val joinedChannels by viewModel.joinedChannels.observeAsState(emptySet()) - val hasUnreadChannels by viewModel.unreadChannelMessages.observeAsState(emptyMap()) - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.observeAsState(emptySet()) - val privateChats by viewModel.privateChats.observeAsState(emptyMap()) - val channelMessages by viewModel.channelMessages.observeAsState(emptyMap()) - val showSidebar by viewModel.showSidebar.observeAsState(false) - val showCommandSuggestions by viewModel.showCommandSuggestions.observeAsState(false) - val commandSuggestions by viewModel.commandSuggestions.observeAsState(emptyList()) - val showMentionSuggestions by viewModel.showMentionSuggestions.observeAsState(false) - val mentionSuggestions by viewModel.mentionSuggestions.observeAsState(emptyList()) - val showAppInfo by viewModel.showAppInfo.observeAsState(false) + val messages by viewModel.messages.collectAsState() + val connectedPeers by viewModel.connectedPeers.collectAsState() + val nickname by viewModel.nickname.collectAsState() + val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsState() + val currentChannel by viewModel.currentChannel.collectAsState() + val joinedChannels by viewModel.joinedChannels.collectAsState() + val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsState() + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() + val privateChats by viewModel.privateChats.collectAsState() + val channelMessages by viewModel.channelMessages.collectAsState() + val showSidebar by viewModel.showSidebar.collectAsState() + val showCommandSuggestions by viewModel.showCommandSuggestions.collectAsState() + val commandSuggestions by viewModel.commandSuggestions.collectAsState() + val showMentionSuggestions by viewModel.showMentionSuggestions.collectAsState() + val mentionSuggestions by viewModel.mentionSuggestions.collectAsState() + val showAppInfo by viewModel.showAppInfo.collectAsState() var messageText by remember { mutableStateOf(TextFieldValue("")) } var showPasswordPrompt by remember { mutableStateOf(false) } @@ -78,11 +77,11 @@ fun ChatScreen(viewModel: ChatViewModel) { showPasswordDialog = showPasswordPrompt } - val isConnected by viewModel.isConnected.observeAsState(false) - val passwordPromptChannel by viewModel.passwordPromptChannel.observeAsState(null) + val isConnected by viewModel.isConnected.collectAsState() + val passwordPromptChannel by viewModel.passwordPromptChannel.collectAsState() // Get location channel info for timeline switching - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() // Determine what messages to show based on current context (unified timelines) val displayMessages = when { diff --git a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt index 1b0837a22..219768577 100644 --- a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt +++ b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt @@ -9,7 +9,6 @@ import androidx.compose.material.icons.outlined.Explore import androidx.compose.material.icons.outlined.LocationOn import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -46,11 +45,11 @@ fun GeohashPeopleList( val colorScheme = MaterialTheme.colorScheme // Observe geohash people from ChatViewModel - val geohashPeople by viewModel.geohashPeople.observeAsState(emptyList()) - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() - val isTeleported by viewModel.isTeleported.observeAsState(false) - val nickname by viewModel.nickname.observeAsState("") - val unreadPrivateMessages by viewModel.unreadPrivateMessages.observeAsState(emptySet()) + val geohashPeople by viewModel.geohashPeople.collectAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() + val isTeleported by viewModel.isTeleported.collectAsState() + val nickname by viewModel.nickname.collectAsState() + val unreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() Column { // Header matching iOS style diff --git a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt index 0555e74ff..7519c15bb 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt @@ -18,7 +18,6 @@ import androidx.compose.material.icons.filled.PinDrop import androidx.compose.material.icons.outlined.BookmarkBorder import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.focus.onFocusChanged @@ -57,18 +56,18 @@ fun LocationChannelsSheet( val bookmarksStore = remember { GeohashBookmarksStore.getInstance(context) } // Observe location manager state - val permissionState by locationManager.permissionState.observeAsState() - val availableChannels by locationManager.availableChannels.observeAsState(emptyList()) - val selectedChannel by locationManager.selectedChannel.observeAsState() - val locationNames by locationManager.locationNames.observeAsState(emptyMap()) - val locationServicesEnabled by locationManager.locationServicesEnabled.observeAsState(false) + val permissionState by locationManager.permissionState.collectAsState() + val availableChannels by locationManager.availableChannels.collectAsState() + val selectedChannel by locationManager.selectedChannel.collectAsState() + val locationNames by locationManager.locationNames.collectAsState() + val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsState() // Observe bookmarks state - val bookmarks by bookmarksStore.bookmarks.observeAsState(emptyList()) - val bookmarkNames by bookmarksStore.bookmarkNames.observeAsState(emptyMap()) + val bookmarks by bookmarksStore.bookmarks.collectAsState() + val bookmarkNames by bookmarksStore.bookmarkNames.collectAsState() // Observe reactive participant counts - val geohashParticipantCounts by viewModel.geohashParticipantCounts.observeAsState(emptyMap()) + val geohashParticipantCounts by viewModel.geohashParticipantCounts.collectAsState() // UI state var customGeohash by remember { mutableStateOf("") } diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt index 09084a920..b8bea3460 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt @@ -7,8 +7,8 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -35,10 +35,10 @@ fun LocationNotesButton( val context = LocalContext.current // Get channel and permission state - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() val locationManager = remember { LocationChannelManager.getInstance(context) } - val permissionState by locationManager.permissionState.observeAsState() - val locationServicesEnabled by locationManager.locationServicesEnabled.observeAsState(false) + val permissionState by locationManager.permissionState.collectAsState() + val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsState(false) // Check both permission AND location services enabled val locationPermissionGranted = permissionState == LocationChannelManager.PermissionState.AUTHORIZED @@ -46,7 +46,7 @@ fun LocationNotesButton( // Get notes count from LocationNotesManager val notesManager = remember { LocationNotesManager.getInstance() } - val notes by notesManager.notes.observeAsState(emptyList()) + val notes by notesManager.notes.collectAsState() val notesCount = notes.size // Only show in mesh mode when location is authorized (iOS pattern) diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt index 23b9d952b..efb45280e 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt @@ -12,7 +12,6 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowUpward import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -57,16 +56,16 @@ fun LocationNotesSheet( val locationManager = remember { LocationChannelManager.getInstance(context) } // State - val notes by notesManager.notes.observeAsState(emptyList()) - val state by notesManager.state.observeAsState(LocationNotesManager.State.IDLE) - val errorMessage by notesManager.errorMessage.observeAsState() - val initialLoadComplete by notesManager.initialLoadComplete.observeAsState(false) + val notes by notesManager.notes.collectAsState() + val state by notesManager.state.collectAsState(LocationNotesManager.State.IDLE) + val errorMessage by notesManager.errorMessage.collectAsState() + val initialLoadComplete by notesManager.initialLoadComplete.collectAsState(false) // SIMPLIFIED: Get count directly from notes list (no separate counter needed) val count = notes.size // Get location name (building or block) - matches iOS locationNames lookup - val locationNames by locationManager.locationNames.observeAsState(emptyMap()) + val locationNames by locationManager.locationNames.collectAsState() val displayLocationName = locationNames[GeohashChannelLevel.BUILDING]?.takeIf { it.isNotEmpty() } ?: locationNames[GeohashChannelLevel.BLOCK]?.takeIf { it.isNotEmpty() } diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt index 9d4da4c9e..cee0f482a 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt @@ -3,8 +3,8 @@ package com.bitchat.android.ui import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -26,15 +26,15 @@ fun LocationNotesSheetPresenter( ) { val context = LocalContext.current val locationManager = remember { LocationChannelManager.getInstance(context) } - val availableChannels by locationManager.availableChannels.observeAsState(emptyList()) - val nickname by viewModel.nickname.observeAsState("") + val availableChannels by locationManager.availableChannels.collectAsState() + val nickname by viewModel.nickname.collectAsState() // iOS pattern: notesGeohash ?? LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash val buildingGeohash = availableChannels.firstOrNull { it.level == GeohashChannelLevel.BUILDING }?.geohash if (buildingGeohash != null) { // Get location name from locationManager - val locationNames by locationManager.locationNames.observeAsState(emptyMap()) + val locationNames by locationManager.locationNames.collectAsState() val locationName = locationNames[GeohashChannelLevel.BUILDING] ?: locationNames[GeohashChannelLevel.BLOCK] diff --git a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt index a8c59ef7e..d61160179 100644 --- a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt +++ b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt @@ -12,7 +12,6 @@ import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* import androidx.compose.runtime.* -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -39,14 +38,14 @@ fun SidebarOverlay( val colorScheme = MaterialTheme.colorScheme val interactionSource = remember { MutableInteractionSource() } - val connectedPeers by viewModel.connectedPeers.observeAsState(emptyList()) - val joinedChannels by viewModel.joinedChannels.observeAsState(emptyList()) - val currentChannel by viewModel.currentChannel.observeAsState() - val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.observeAsState() - val nickname by viewModel.nickname.observeAsState("") - val unreadChannelMessages by viewModel.unreadChannelMessages.observeAsState(emptyMap()) - val peerNicknames by viewModel.peerNicknames.observeAsState(emptyMap()) - val peerRSSI by viewModel.peerRSSI.observeAsState(emptyMap()) + val connectedPeers by viewModel.connectedPeers.collectAsState() + val joinedChannels by viewModel.joinedChannels.collectAsState() + val currentChannel by viewModel.currentChannel.collectAsState() + val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsState() + val nickname by viewModel.nickname.collectAsState() + val unreadChannelMessages by viewModel.unreadChannelMessages.collectAsState() + val peerNicknames by viewModel.peerNicknames.collectAsState() + val peerRSSI by viewModel.peerRSSI.collectAsState() Box( modifier = modifier @@ -110,7 +109,7 @@ fun SidebarOverlay( // People section - switch between mesh and geohash lists (iOS-compatible) item { - val selectedLocationChannel by viewModel.selectedLocationChannel.observeAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() when (selectedLocationChannel) { is com.bitchat.android.geohash.ChannelID.Location -> { @@ -291,10 +290,10 @@ fun PeopleSection( } // Observe reactive state for favorites and fingerprints - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.observeAsState(emptySet()) - val privateChats by viewModel.privateChats.observeAsState(emptyMap()) - val favoritePeers by viewModel.favoritePeers.observeAsState(emptySet()) - val peerFingerprints by viewModel.peerFingerprints.observeAsState(emptyMap()) + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() + val privateChats by viewModel.privateChats.collectAsState() + val favoritePeers by viewModel.favoritePeers.collectAsState() + val peerFingerprints by viewModel.peerFingerprints.collectAsState() // Reactive favorite computation for all peers val peerFavoriteStates = remember(favoritePeers, peerFingerprints, connectedPeers) { @@ -384,7 +383,7 @@ fun PeopleSection( val (bName, _) = com.bitchat.android.ui.splitSuffix(displayName) val showHash = (baseNameCounts[bName] ?: 0) > 1 - val directMap by viewModel.peerDirect.observeAsState(emptyMap()) + val directMap by viewModel.peerDirect.collectAsState() val isDirectLive = directMap[peerID] ?: try { viewModel.meshService.getPeerInfo(peerID)?.isDirectConnection == true } catch (_: Exception) { false } PeerItem( peerID = peerID, From 9eb1c91498cc29a9a45d7d856092faf4ef8061a4 Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 12:58:05 +0400 Subject: [PATCH 19/24] Refactor: Use `collectAsStateWithLifecycle` for UI state collection --- .../java/com/bitchat/android/ui/AboutSheet.kt | 9 +++-- .../java/com/bitchat/android/ui/ChatHeader.kt | 35 +++++++++-------- .../java/com/bitchat/android/ui/ChatScreen.kt | 39 ++++++++++--------- .../bitchat/android/ui/GeohashPeopleList.kt | 11 +++--- .../android/ui/LocationChannelsSheet.kt | 17 ++++---- .../bitchat/android/ui/LocationNotesButton.kt | 10 ++--- .../bitchat/android/ui/LocationNotesSheet.kt | 11 +++--- .../android/ui/LocationNotesSheetPresenter.kt | 8 ++-- .../android/ui/MatrixEncryptionAnimation.kt | 3 +- .../bitchat/android/ui/PoWStatusIndicator.kt | 7 ++-- .../bitchat/android/ui/SidebarComponents.kt | 27 ++++++------- 11 files changed, 93 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt index da8524cda..644763a6d 100644 --- a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt @@ -31,6 +31,7 @@ import com.bitchat.android.nostr.NostrProofOfWork import com.bitchat.android.nostr.PoWPreferenceManager import com.bitchat.android.ui.debug.DebugSettingsSheet import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R /** * About Sheet for bitchat app information @@ -241,7 +242,7 @@ fun AboutSheet( .padding(horizontal = 24.dp) .padding(top = 24.dp, bottom = 8.dp) ) - val themePref by com.bitchat.android.ui.theme.ThemePreferenceManager.themeFlow.collectAsState() + val themePref by com.bitchat.android.ui.theme.ThemePreferenceManager.themeFlow.collectAsStateWithLifecycle() Row( modifier = Modifier.padding(horizontal = 24.dp), horizontalArrangement = Arrangement.spacedBy(8.dp) @@ -277,8 +278,8 @@ fun AboutSheet( PoWPreferenceManager.init(context) } - val powEnabled by PoWPreferenceManager.powEnabled.collectAsState() - val powDifficulty by PoWPreferenceManager.powDifficulty.collectAsState() + val powEnabled by PoWPreferenceManager.powEnabled.collectAsStateWithLifecycle() + val powDifficulty by PoWPreferenceManager.powDifficulty.collectAsStateWithLifecycle() Column( modifier = Modifier.padding(horizontal = 24.dp), @@ -384,7 +385,7 @@ fun AboutSheet( // Network (Tor) section item(key = "network_section") { val torMode = remember { mutableStateOf(com.bitchat.android.net.TorPreferenceManager.get(context)) } - val torStatus by com.bitchat.android.net.TorManager.statusFlow.collectAsState() + val torStatus by com.bitchat.android.net.TorManager.statusFlow.collectAsStateWithLifecycle() Text( text = stringResource(R.string.about_network), style = MaterialTheme.typography.labelLarge, diff --git a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt index 6b48ffdc3..dd51f6aba 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatHeader.kt @@ -30,6 +30,7 @@ import com.bitchat.android.core.ui.utils.singleOrTripleClickable import com.bitchat.android.geohash.LocationChannelManager.PermissionState import androidx.compose.foundation.Canvas import androidx.compose.ui.geometry.Offset +import androidx.lifecycle.compose.collectAsStateWithLifecycle /** * Header components for ChatScreen @@ -58,7 +59,7 @@ fun isFavoriteReactive( fun TorStatusDot( modifier: Modifier = Modifier ) { - val torStatus by com.bitchat.android.net.TorManager.statusFlow.collectAsState() + val torStatus by com.bitchat.android.net.TorManager.statusFlow.collectAsStateWithLifecycle() if (torStatus.mode != com.bitchat.android.net.TorMode.OFF) { val dotColor = when { @@ -247,10 +248,10 @@ fun ChatHeaderContent( when { selectedPrivatePeer != null -> { // Private chat header - Fully reactive state tracking - val favoritePeers by viewModel.favoritePeers.collectAsState() - val peerFingerprints by viewModel.peerFingerprints.collectAsState() - val peerSessionStates by viewModel.peerSessionStates.collectAsState() - val peerNicknames by viewModel.peerNicknames.collectAsState() + val favoritePeers by viewModel.favoritePeers.collectAsStateWithLifecycle() + val peerFingerprints by viewModel.peerFingerprints.collectAsStateWithLifecycle() + val peerSessionStates by viewModel.peerSessionStates.collectAsStateWithLifecycle() + val peerNicknames by viewModel.peerNicknames.collectAsStateWithLifecycle() // Reactive favorite computation - no more static lookups! val isFavorite = isFavoriteReactive( @@ -263,8 +264,8 @@ fun ChatHeaderContent( Log.d("ChatHeader", "Header recomposing: peer=$selectedPrivatePeer, isFav=$isFavorite, sessionState=$sessionState") // Pass geohash context and people for NIP-17 chat title formatting - val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() - val geohashPeople by viewModel.geohashPeople.collectAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() + val geohashPeople by viewModel.geohashPeople.collectAsStateWithLifecycle() PrivateChatHeader( peerID = selectedPrivatePeer, @@ -522,18 +523,18 @@ private fun MainHeader( viewModel: ChatViewModel ) { val colorScheme = MaterialTheme.colorScheme - val connectedPeers by viewModel.connectedPeers.collectAsState() - val joinedChannels by viewModel.joinedChannels.collectAsState() - val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsState() - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() - val isConnected by viewModel.isConnected.collectAsState() - val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() - val geohashPeople by viewModel.geohashPeople.collectAsState() + val connectedPeers by viewModel.connectedPeers.collectAsStateWithLifecycle() + val joinedChannels by viewModel.joinedChannels.collectAsStateWithLifecycle() + val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsStateWithLifecycle() + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsStateWithLifecycle() + val isConnected by viewModel.isConnected.collectAsStateWithLifecycle() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() + val geohashPeople by viewModel.geohashPeople.collectAsStateWithLifecycle() // Bookmarks store for current geohash toggle (iOS parity) val context = androidx.compose.ui.platform.LocalContext.current val bookmarksStore = remember { com.bitchat.android.geohash.GeohashBookmarksStore.getInstance(context) } - val bookmarks by bookmarksStore.bookmarks.collectAsState() + val bookmarks by bookmarksStore.bookmarks.collectAsStateWithLifecycle() Row( modifier = Modifier.fillMaxWidth(), @@ -652,8 +653,8 @@ private fun LocationChannelsButton( val colorScheme = MaterialTheme.colorScheme // Get current channel selection from location manager - val selectedChannel by viewModel.selectedLocationChannel.collectAsState() - val teleported by viewModel.isTeleported.collectAsState() + val selectedChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() + val teleported by viewModel.isTeleported.collectAsStateWithLifecycle() val (badgeText, badgeColor) = when (selectedChannel) { is com.bitchat.android.geohash.ChannelID.Mesh -> { diff --git a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt index c287be920..d4d33ac0e 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.Dp import androidx.compose.ui.zIndex +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.model.BitchatMessage import com.bitchat.android.ui.media.FullScreenImageViewer @@ -40,22 +41,22 @@ import com.bitchat.android.ui.media.FullScreenImageViewer @Composable fun ChatScreen(viewModel: ChatViewModel) { val colorScheme = MaterialTheme.colorScheme - val messages by viewModel.messages.collectAsState() - val connectedPeers by viewModel.connectedPeers.collectAsState() - val nickname by viewModel.nickname.collectAsState() - val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsState() - val currentChannel by viewModel.currentChannel.collectAsState() - val joinedChannels by viewModel.joinedChannels.collectAsState() - val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsState() - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() - val privateChats by viewModel.privateChats.collectAsState() - val channelMessages by viewModel.channelMessages.collectAsState() - val showSidebar by viewModel.showSidebar.collectAsState() - val showCommandSuggestions by viewModel.showCommandSuggestions.collectAsState() - val commandSuggestions by viewModel.commandSuggestions.collectAsState() - val showMentionSuggestions by viewModel.showMentionSuggestions.collectAsState() - val mentionSuggestions by viewModel.mentionSuggestions.collectAsState() - val showAppInfo by viewModel.showAppInfo.collectAsState() + val messages by viewModel.messages.collectAsStateWithLifecycle() + val connectedPeers by viewModel.connectedPeers.collectAsStateWithLifecycle() + val nickname by viewModel.nickname.collectAsStateWithLifecycle() + val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsStateWithLifecycle() + val currentChannel by viewModel.currentChannel.collectAsStateWithLifecycle() + val joinedChannels by viewModel.joinedChannels.collectAsStateWithLifecycle() + val hasUnreadChannels by viewModel.unreadChannelMessages.collectAsStateWithLifecycle() + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsStateWithLifecycle() + val privateChats by viewModel.privateChats.collectAsStateWithLifecycle() + val channelMessages by viewModel.channelMessages.collectAsStateWithLifecycle() + val showSidebar by viewModel.showSidebar.collectAsStateWithLifecycle() + val showCommandSuggestions by viewModel.showCommandSuggestions.collectAsStateWithLifecycle() + val commandSuggestions by viewModel.commandSuggestions.collectAsStateWithLifecycle() + val showMentionSuggestions by viewModel.showMentionSuggestions.collectAsStateWithLifecycle() + val mentionSuggestions by viewModel.mentionSuggestions.collectAsStateWithLifecycle() + val showAppInfo by viewModel.showAppInfo.collectAsStateWithLifecycle() var messageText by remember { mutableStateOf(TextFieldValue("")) } var showPasswordPrompt by remember { mutableStateOf(false) } @@ -77,11 +78,11 @@ fun ChatScreen(viewModel: ChatViewModel) { showPasswordDialog = showPasswordPrompt } - val isConnected by viewModel.isConnected.collectAsState() - val passwordPromptChannel by viewModel.passwordPromptChannel.collectAsState() + val isConnected by viewModel.isConnected.collectAsStateWithLifecycle() + val passwordPromptChannel by viewModel.passwordPromptChannel.collectAsStateWithLifecycle() // Get location channel info for timeline switching - val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() // Determine what messages to show based on current context (unified timelines) val displayMessages = when { diff --git a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt index 219768577..0bdc85ee1 100644 --- a/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt +++ b/app/src/main/java/com/bitchat/android/ui/GeohashPeopleList.kt @@ -20,6 +20,7 @@ import com.bitchat.android.ui.theme.BASE_FONT_SIZE import java.util.* import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R /** @@ -45,11 +46,11 @@ fun GeohashPeopleList( val colorScheme = MaterialTheme.colorScheme // Observe geohash people from ChatViewModel - val geohashPeople by viewModel.geohashPeople.collectAsState() - val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() - val isTeleported by viewModel.isTeleported.collectAsState() - val nickname by viewModel.nickname.collectAsState() - val unreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() + val geohashPeople by viewModel.geohashPeople.collectAsStateWithLifecycle() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() + val isTeleported by viewModel.isTeleported.collectAsStateWithLifecycle() + val nickname by viewModel.nickname.collectAsStateWithLifecycle() + val unreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsStateWithLifecycle() Column { // Header matching iOS style diff --git a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt index 7519c15bb..90fc9c857 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt @@ -37,6 +37,7 @@ import com.bitchat.android.geohash.LocationChannelManager import com.bitchat.android.geohash.GeohashBookmarksStore import com.bitchat.android.ui.theme.BASE_FONT_SIZE import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R /** @@ -56,18 +57,18 @@ fun LocationChannelsSheet( val bookmarksStore = remember { GeohashBookmarksStore.getInstance(context) } // Observe location manager state - val permissionState by locationManager.permissionState.collectAsState() - val availableChannels by locationManager.availableChannels.collectAsState() - val selectedChannel by locationManager.selectedChannel.collectAsState() - val locationNames by locationManager.locationNames.collectAsState() - val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsState() + val permissionState by locationManager.permissionState.collectAsStateWithLifecycle() + val availableChannels by locationManager.availableChannels.collectAsStateWithLifecycle() + val selectedChannel by locationManager.selectedChannel.collectAsStateWithLifecycle() + val locationNames by locationManager.locationNames.collectAsStateWithLifecycle() + val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsStateWithLifecycle() // Observe bookmarks state - val bookmarks by bookmarksStore.bookmarks.collectAsState() - val bookmarkNames by bookmarksStore.bookmarkNames.collectAsState() + val bookmarks by bookmarksStore.bookmarks.collectAsStateWithLifecycle() + val bookmarkNames by bookmarksStore.bookmarkNames.collectAsStateWithLifecycle() // Observe reactive participant counts - val geohashParticipantCounts by viewModel.geohashParticipantCounts.collectAsState() + val geohashParticipantCounts by viewModel.geohashParticipantCounts.collectAsStateWithLifecycle() // UI state var customGeohash by remember { mutableStateOf("") } diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt index b8bea3460..601d4c038 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesButton.kt @@ -7,7 +7,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier @@ -35,10 +35,10 @@ fun LocationNotesButton( val context = LocalContext.current // Get channel and permission state - val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsState() + val selectedLocationChannel by viewModel.selectedLocationChannel.collectAsStateWithLifecycle() val locationManager = remember { LocationChannelManager.getInstance(context) } - val permissionState by locationManager.permissionState.collectAsState() - val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsState(false) + val permissionState by locationManager.permissionState.collectAsStateWithLifecycle() + val locationServicesEnabled by locationManager.locationServicesEnabled.collectAsStateWithLifecycle(false) // Check both permission AND location services enabled val locationPermissionGranted = permissionState == LocationChannelManager.PermissionState.AUTHORIZED @@ -46,7 +46,7 @@ fun LocationNotesButton( // Get notes count from LocationNotesManager val notesManager = remember { LocationNotesManager.getInstance() } - val notes by notesManager.notes.collectAsState() + val notes by notesManager.notes.collectAsStateWithLifecycle() val notesCount = notes.size // Only show in mesh mode when location is authorized (iOS pattern) diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt index efb45280e..461796d3e 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheet.kt @@ -24,6 +24,7 @@ import com.bitchat.android.R import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.geohash.GeohashChannelLevel import com.bitchat.android.geohash.LocationChannelManager import com.bitchat.android.nostr.LocationNotesManager @@ -56,16 +57,16 @@ fun LocationNotesSheet( val locationManager = remember { LocationChannelManager.getInstance(context) } // State - val notes by notesManager.notes.collectAsState() - val state by notesManager.state.collectAsState(LocationNotesManager.State.IDLE) - val errorMessage by notesManager.errorMessage.collectAsState() - val initialLoadComplete by notesManager.initialLoadComplete.collectAsState(false) + val notes by notesManager.notes.collectAsStateWithLifecycle() + val state by notesManager.state.collectAsStateWithLifecycle(LocationNotesManager.State.IDLE) + val errorMessage by notesManager.errorMessage.collectAsStateWithLifecycle() + val initialLoadComplete by notesManager.initialLoadComplete.collectAsStateWithLifecycle(false) // SIMPLIFIED: Get count directly from notes list (no separate counter needed) val count = notes.size // Get location name (building or block) - matches iOS locationNames lookup - val locationNames by locationManager.locationNames.collectAsState() + val locationNames by locationManager.locationNames.collectAsStateWithLifecycle() val displayLocationName = locationNames[GeohashChannelLevel.BUILDING]?.takeIf { it.isNotEmpty() } ?: locationNames[GeohashChannelLevel.BLOCK]?.takeIf { it.isNotEmpty() } diff --git a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt index cee0f482a..d17b6d7c4 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationNotesSheetPresenter.kt @@ -3,13 +3,13 @@ package com.bitchat.android.ui import androidx.compose.foundation.layout.* import androidx.compose.material3.* import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.geohash.GeohashChannelLevel import com.bitchat.android.geohash.LocationChannelManager @@ -26,15 +26,15 @@ fun LocationNotesSheetPresenter( ) { val context = LocalContext.current val locationManager = remember { LocationChannelManager.getInstance(context) } - val availableChannels by locationManager.availableChannels.collectAsState() - val nickname by viewModel.nickname.collectAsState() + val availableChannels by locationManager.availableChannels.collectAsStateWithLifecycle() + val nickname by viewModel.nickname.collectAsStateWithLifecycle() // iOS pattern: notesGeohash ?? LocationChannelManager.shared.availableChannels.first(where: { $0.level == .building })?.geohash val buildingGeohash = availableChannels.firstOrNull { it.level == GeohashChannelLevel.BUILDING }?.geohash if (buildingGeohash != null) { // Get location name from locationManager - val locationNames by locationManager.locationNames.collectAsState() + val locationNames by locationManager.locationNames.collectAsStateWithLifecycle() val locationName = locationNames[GeohashChannelLevel.BUILDING] ?: locationNames[GeohashChannelLevel.BLOCK] diff --git a/app/src/main/java/com/bitchat/android/ui/MatrixEncryptionAnimation.kt b/app/src/main/java/com/bitchat/android/ui/MatrixEncryptionAnimation.kt index 1ea59444c..9c7d776f6 100644 --- a/app/src/main/java/com/bitchat/android/ui/MatrixEncryptionAnimation.kt +++ b/app/src/main/java/com/bitchat/android/ui/MatrixEncryptionAnimation.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.font.FontFamily +import androidx.lifecycle.compose.collectAsStateWithLifecycle import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -26,7 +27,7 @@ private enum class CharacterAnimationState { */ @Composable fun shouldAnimateMessage(messageId: String): Boolean { - val miningMessages by PoWMiningTracker.miningMessages.collectAsState() + val miningMessages by PoWMiningTracker.miningMessages.collectAsStateWithLifecycle() return miningMessages.contains(messageId) } diff --git a/app/src/main/java/com/bitchat/android/ui/PoWStatusIndicator.kt b/app/src/main/java/com/bitchat/android/ui/PoWStatusIndicator.kt index b0d551289..883b2b45d 100644 --- a/app/src/main/java/com/bitchat/android/ui/PoWStatusIndicator.kt +++ b/app/src/main/java/com/bitchat/android/ui/PoWStatusIndicator.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.bitchat.android.nostr.NostrProofOfWork import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R import com.bitchat.android.nostr.PoWPreferenceManager @@ -27,9 +28,9 @@ fun PoWStatusIndicator( modifier: Modifier = Modifier, style: PoWIndicatorStyle = PoWIndicatorStyle.COMPACT ) { - val powEnabled by PoWPreferenceManager.powEnabled.collectAsState() - val powDifficulty by PoWPreferenceManager.powDifficulty.collectAsState() - val isMining by PoWPreferenceManager.isMining.collectAsState() + val powEnabled by PoWPreferenceManager.powEnabled.collectAsStateWithLifecycle() + val powDifficulty by PoWPreferenceManager.powDifficulty.collectAsStateWithLifecycle() + val isMining by PoWPreferenceManager.isMining.collectAsStateWithLifecycle() val colorScheme = MaterialTheme.colorScheme val isDark = colorScheme.background.red + colorScheme.background.green + colorScheme.background.blue < 1.5f diff --git a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt index d61160179..4ab4360af 100644 --- a/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt +++ b/app/src/main/java/com/bitchat/android/ui/SidebarComponents.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.text.style.TextOverflow +import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.ui.theme.BASE_FONT_SIZE @@ -38,14 +39,14 @@ fun SidebarOverlay( val colorScheme = MaterialTheme.colorScheme val interactionSource = remember { MutableInteractionSource() } - val connectedPeers by viewModel.connectedPeers.collectAsState() - val joinedChannels by viewModel.joinedChannels.collectAsState() - val currentChannel by viewModel.currentChannel.collectAsState() - val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsState() - val nickname by viewModel.nickname.collectAsState() - val unreadChannelMessages by viewModel.unreadChannelMessages.collectAsState() - val peerNicknames by viewModel.peerNicknames.collectAsState() - val peerRSSI by viewModel.peerRSSI.collectAsState() + val connectedPeers by viewModel.connectedPeers.collectAsStateWithLifecycle() + val joinedChannels by viewModel.joinedChannels.collectAsStateWithLifecycle() + val currentChannel by viewModel.currentChannel.collectAsStateWithLifecycle() + val selectedPrivatePeer by viewModel.selectedPrivateChatPeer.collectAsStateWithLifecycle() + val nickname by viewModel.nickname.collectAsStateWithLifecycle() + val unreadChannelMessages by viewModel.unreadChannelMessages.collectAsStateWithLifecycle() + val peerNicknames by viewModel.peerNicknames.collectAsStateWithLifecycle() + val peerRSSI by viewModel.peerRSSI.collectAsStateWithLifecycle() Box( modifier = modifier @@ -290,10 +291,10 @@ fun PeopleSection( } // Observe reactive state for favorites and fingerprints - val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsState() - val privateChats by viewModel.privateChats.collectAsState() - val favoritePeers by viewModel.favoritePeers.collectAsState() - val peerFingerprints by viewModel.peerFingerprints.collectAsState() + val hasUnreadPrivateMessages by viewModel.unreadPrivateMessages.collectAsStateWithLifecycle() + val privateChats by viewModel.privateChats.collectAsStateWithLifecycle() + val favoritePeers by viewModel.favoritePeers.collectAsStateWithLifecycle() + val peerFingerprints by viewModel.peerFingerprints.collectAsStateWithLifecycle() // Reactive favorite computation for all peers val peerFavoriteStates = remember(favoritePeers, peerFingerprints, connectedPeers) { @@ -383,7 +384,7 @@ fun PeopleSection( val (bName, _) = com.bitchat.android.ui.splitSuffix(displayName) val showHash = (baseNameCounts[bName] ?: 0) > 1 - val directMap by viewModel.peerDirect.collectAsState() + val directMap by viewModel.peerDirect.collectAsStateWithLifecycle() val isDirectLive = directMap[peerID] ?: try { viewModel.meshService.getPeerInfo(peerID)?.isDirectConnection == true } catch (_: Exception) { false } PeerItem( peerID = peerID, From a35c8fcab145b34f77075098fc12e7e53ed95c39 Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 13:01:35 +0400 Subject: [PATCH 20/24] Refactor: move CloseButton to core/ui/component --- .../core/ui/component/button/CloseButton.kt | 34 +++++++++++++++++++ .../java/com/bitchat/android/ui/AboutSheet.kt | 27 ++------------- .../android/ui/LocationChannelsSheet.kt | 1 + 3 files changed, 37 insertions(+), 25 deletions(-) create mode 100644 app/src/main/java/com/bitchat/android/core/ui/component/button/CloseButton.kt diff --git a/app/src/main/java/com/bitchat/android/core/ui/component/button/CloseButton.kt b/app/src/main/java/com/bitchat/android/core/ui/component/button/CloseButton.kt new file mode 100644 index 000000000..96f408bc0 --- /dev/null +++ b/app/src/main/java/com/bitchat/android/core/ui/component/button/CloseButton.kt @@ -0,0 +1,34 @@ +package com.bitchat.android.core.ui.component.button + +import androidx.compose.foundation.layout.size +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun CloseButton( + onClick: () -> Unit, + modifier: Modifier = Modifier.Companion +) { + IconButton( + onClick = onClick, + modifier = modifier + .size(32.dp), + colors = IconButtonDefaults.iconButtonColors( + contentColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f), + containerColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.1f) + ) + ) { + Icon( + imageVector = Icons.Default.Close, + contentDescription = "Close", + modifier = Modifier.Companion.size(18.dp) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt index 644763a6d..85ec8638a 100644 --- a/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/AboutSheet.kt @@ -9,17 +9,14 @@ import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Bluetooth -import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Public -import androidx.compose.material.icons.filled.Security import androidx.compose.material.icons.filled.Warning import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily @@ -29,10 +26,11 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.bitchat.android.nostr.NostrProofOfWork import com.bitchat.android.nostr.PoWPreferenceManager -import com.bitchat.android.ui.debug.DebugSettingsSheet import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R +import com.bitchat.android.core.ui.component.button.CloseButton + /** * About Sheet for bitchat app information * Matches the design language of LocationChannelsSheet @@ -565,27 +563,6 @@ fun AboutSheet( } } -@Composable -fun CloseButton( - onClick: () -> Unit, - modifier: Modifier = Modifier -) { - IconButton( - onClick = onClick, - modifier = modifier - .size(32.dp), - colors = IconButtonDefaults.iconButtonColors( - contentColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.6f), - containerColor = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.1f) - ) - ) { - Icon( - imageVector = Icons.Default.Close, - contentDescription = "Close", - modifier = Modifier.size(18.dp) - ) - } -} /** * Password prompt dialog for password-protected channels * Kept as dialog since it requires user input diff --git a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt index 90fc9c857..6f47d68f7 100644 --- a/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt +++ b/app/src/main/java/com/bitchat/android/ui/LocationChannelsSheet.kt @@ -39,6 +39,7 @@ import com.bitchat.android.ui.theme.BASE_FONT_SIZE import androidx.compose.ui.res.stringResource import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.bitchat.android.R +import com.bitchat.android.core.ui.component.button.CloseButton /** * Location Channels Sheet for selecting geohash-based location channels From cf7f2e4c54bb1f8b9cd78c5e94c6d247f537ee9c Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 13:04:30 +0400 Subject: [PATCH 21/24] Refactor: remove AI generated comments --- app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt index 46a5cf434..372352c93 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt @@ -103,7 +103,7 @@ class ChatViewModel( - // Expose state through StateFlow (maintaining the same interface) + val messages: StateFlow> = state.messages val connectedPeers: StateFlow> = state.connectedPeers val nickname: StateFlow = state.nickname From 8e631f2b50135a8e324296166aab5600b1f7034c Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 13:14:11 +0400 Subject: [PATCH 22/24] Refactor: fix combine to map and use WhileSubscribed --- .../java/com/bitchat/android/ui/ChatState.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatState.kt b/app/src/main/java/com/bitchat/android/ui/ChatState.kt index 15986e48e..9cd544d83 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatState.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatState.kt @@ -6,9 +6,11 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn /** @@ -137,24 +139,20 @@ class ChatState { private val _geohashParticipantCounts = MutableStateFlow>(emptyMap()) val geohashParticipantCounts: StateFlow> = _geohashParticipantCounts.asStateFlow() - // Unread state computed properties using Flow.combine + val hasUnreadChannels: StateFlow = _unreadChannelMessages - .combine(_unreadChannelMessages) { unreadMap, _ -> - unreadMap.values.any { it > 0 } - } + .map { unreadMap -> unreadMap.values.any { it > 0 } } .stateIn( scope = CoroutineScope(Dispatchers.Default), - started = SharingStarted.Eagerly, + started = WhileSubscribed(5_000), initialValue = false ) val hasUnreadPrivateMessages: StateFlow = _unreadPrivateMessages - .combine(_unreadPrivateMessages) { unreadSet, _ -> - unreadSet.isNotEmpty() - } + .map { unreadSet -> unreadSet.isNotEmpty() } .stateIn( scope = CoroutineScope(Dispatchers.Default), - started = SharingStarted.Eagerly, + started = WhileSubscribed(5_000), initialValue = false ) From f541d30ffcfcc534511ead20432d9182fa17033f Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 13:17:46 +0400 Subject: [PATCH 23/24] Refactor: Pass CoroutineScope to ChatState This commit refactors the `ChatState` class to accept a `CoroutineScope` in its constructor instead of creating its own. **Key Changes:** - **`ChatState.kt`**: The constructor now requires a `CoroutineScope`. This scope is used for the `stateIn` operators that convert `Flows` into `StateFlows` (`hasUnreadChannels`, `hasUnreadPrivateMessages`), ensuring they operate within the lifecycle of the provided scope. - **`ChatViewModel.kt`**: The `viewModelScope` is now passed to the `ChatState` constructor during its instantiation. This ties the lifecycle of the state's coroutines directly to the `ViewModel`'s lifecycle. --- app/src/main/java/com/bitchat/android/ui/ChatState.kt | 8 +++++--- app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt | 4 +++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatState.kt b/app/src/main/java/com/bitchat/android/ui/ChatState.kt index 9cd544d83..6d0f2364e 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatState.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatState.kt @@ -28,7 +28,9 @@ data class CommandSuggestion( /** * Contains all the observable state for the chat system */ -class ChatState { +class ChatState( + scope: CoroutineScope +) { // Core messages and peer state private val _messages = MutableStateFlow>(emptyList()) @@ -143,7 +145,7 @@ class ChatState { val hasUnreadChannels: StateFlow = _unreadChannelMessages .map { unreadMap -> unreadMap.values.any { it > 0 } } .stateIn( - scope = CoroutineScope(Dispatchers.Default), + scope = scope, started = WhileSubscribed(5_000), initialValue = false ) @@ -151,7 +153,7 @@ class ChatState { val hasUnreadPrivateMessages: StateFlow = _unreadPrivateMessages .map { unreadSet -> unreadSet.isNotEmpty() } .stateIn( - scope = CoroutineScope(Dispatchers.Default), + scope = scope, started = WhileSubscribed(5_000), initialValue = false ) diff --git a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt index 372352c93..7cf31d433 100644 --- a/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt +++ b/app/src/main/java/com/bitchat/android/ui/ChatViewModel.kt @@ -47,7 +47,9 @@ class ChatViewModel( } // MARK: - State management - private val state = ChatState() + private val state = ChatState( + scope = viewModelScope, + ) // Transfer progress tracking private val transferMessageMap = mutableMapOf() From 4aaf9968ca71a37d22705299373ddcc2d0517625 Mon Sep 17 00:00:00 2001 From: yet300 Date: Mon, 1 Dec 2025 13:30:24 +0400 Subject: [PATCH 24/24] Test: Use `TestScope` for coroutines in `CommandProcessorTest` This commit refactors `CommandProcessorTest` to use a `TestScope` and `UnconfinedTestDispatcher` for managing coroutines. This ensures that coroutine-based operations within the test are executed in a controlled and predictable manner, improving test reliability. The `coroutineScope` for `CommandProcessor` and the `scope` for `ChatState` are now both configured to use this test-specific scope. --- .../com/bitchat/android/ui/CommandProcessorTest.kt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/test/java/com/bitchat/android/ui/CommandProcessorTest.kt b/app/src/test/java/com/bitchat/android/ui/CommandProcessorTest.kt index 6afdf6d60..f1b33d325 100644 --- a/app/src/test/java/com/bitchat/android/ui/CommandProcessorTest.kt +++ b/app/src/test/java/com/bitchat/android/ui/CommandProcessorTest.kt @@ -5,7 +5,9 @@ import androidx.test.core.app.ApplicationProvider import com.bitchat.android.mesh.BluetoothMeshService import com.bitchat.android.model.BitchatMessage import junit.framework.TestCase.assertEquals - +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.TestScope +import kotlinx.coroutines.test.UnconfinedTestDispatcher import org.junit.Before import org.junit.Ignore import org.junit.Test @@ -18,7 +20,10 @@ import java.util.Date @RunWith(RobolectricTestRunner::class) class CommandProcessorTest() { private val context: Context = ApplicationProvider.getApplicationContext() - private val chatState = ChatState() + @OptIn(ExperimentalCoroutinesApi::class) + private val testDispatcher = UnconfinedTestDispatcher() + private val testScope = TestScope(testDispatcher) + private val chatState = ChatState(scope = testScope) private lateinit var commandProcessor: CommandProcessor val messageManager: MessageManager = MessageManager(state = chatState) @@ -26,7 +31,7 @@ class CommandProcessorTest() { state = chatState, messageManager = messageManager, dataManager = DataManager(context = context), - coroutineScope = kotlinx.coroutines.CoroutineScope(kotlinx.coroutines.Dispatchers.Main.immediate) + coroutineScope = testScope ) private val meshService: BluetoothMeshService = mock()