Summary
The operator of wss://relay.damus.io has indicated it will shut down by end of July 2026. Remove all hardcoded references before then so the app doesn't keep trying to connect to a dead relay.
Scope
wss://relay.damus.io is hardcoded in 31 files. In every case it's one entry among several relays in a list/array (never the sole relay), so removal is a safe, mechanical deletion — no replacement relay is needed to preserve redundancy.
Own-line entries (delete the whole line)
src/components/LongformFoodFeed.svelte:89
src/components/Recipe/TotalZaps.svelte:22
src/components/Recipe/TopZappers.svelte:23
src/lib/engagementCache.ts:11
src/lib/relaySelector.ts:104
src/lib/articleOutbox.ts:87 (has trailing comment // Large general relay)
src/lib/nip17.ts:41
src/lib/memories.ts:117
src/lib/queryBatcher.ts:125
src/lib/connectionManager.ts:69
src/lib/followOutbox.ts:100
src/lib/consts.ts:2 (standardRelays — imported by nostr.ts, nostrBackup.ts, spark/index.ts, wallet/nwcBackup.ts, relaySelector.ts, memories.ts, countQuery.ts, settings/+page.svelte, packs/+page.svelte, debug/+page.svelte — widely reused, so this one is worth fixing first)
src/lib/relayListCache.ts:71
src/lib/countQuery.ts:48 (trailing comment // 394ms - fast and reliable)
src/lib/membershipNotificationService.ts:19
src/lib/recipePackOg.server.ts:13
src/lib/followRecovery.ts:19
src/lib/relays/relaySets.ts:23
src/lib/relays/relaySets.ts:60 (trailing comment // Large general relay)
src/lib/stores/groupZapReceipts.ts:17
src/lib/marketplace/products.ts:26
src/routes/polls/+page.svelte:41
src/routes/reads/+page.svelte:593
src/routes/api/counts/batch/+server.ts:29 (trailing comment // 394ms - fast and reliable)
src/routes/api/counts/[eventId]/+server.ts:22
src/routes/api/cron/test-notification/+server.ts:111
src/routes/api/cron/check-expiring-memberships/+server.ts:78
Inline entries (remove just the one array element, keep the line)
src/components/FoodstrFeedOptimized.svelte:455 — recipes: ['wss://nos.lol', 'wss://relay.damus.io'] → recipes: ['wss://nos.lol']. Also line 452 is a stale benchmark comment naming relay.damus.io (394ms) — worth trimming for accuracy.
src/components/reads/LongformEditorModal.svelte:391 — relays: ['wss://relay.primal.net', 'wss://nos.lol', 'wss://relay.damus.io'] → drop the last element.
src/lib/authManager.ts:670 — relays = ['wss://relay.damus.io', 'wss://nos.lol']; → relays = ['wss://nos.lol'];
src/lib/recipePack.ts:31 — RECIPE_PACK_RELAY_HINTS = ['wss://relay.damus.io', 'wss://relay.primal.net']; → drop the first element.
src/lib/nourish/nourishPublisher.server.ts:19 — PUBLISH_RELAYS = ['wss://nos.lol', 'wss://relay.damus.io', 'wss://relay.primal.net']; → drop the middle element.
Verification
After removal:
grep -rn "relay.damus.io" src should return nothing.
pnpm run check should still pass.
- Spot-check a couple of the affected features (feed loading, zap totals, DM fallback relays, article publish) still work with one fewer relay in their pool.
Summary
The operator of
wss://relay.damus.iohas indicated it will shut down by end of July 2026. Remove all hardcoded references before then so the app doesn't keep trying to connect to a dead relay.Scope
wss://relay.damus.iois hardcoded in 31 files. In every case it's one entry among several relays in a list/array (never the sole relay), so removal is a safe, mechanical deletion — no replacement relay is needed to preserve redundancy.Own-line entries (delete the whole line)
src/components/LongformFoodFeed.svelte:89src/components/Recipe/TotalZaps.svelte:22src/components/Recipe/TopZappers.svelte:23src/lib/engagementCache.ts:11src/lib/relaySelector.ts:104src/lib/articleOutbox.ts:87(has trailing comment// Large general relay)src/lib/nip17.ts:41src/lib/memories.ts:117src/lib/queryBatcher.ts:125src/lib/connectionManager.ts:69src/lib/followOutbox.ts:100src/lib/consts.ts:2(standardRelays— imported bynostr.ts,nostrBackup.ts,spark/index.ts,wallet/nwcBackup.ts,relaySelector.ts,memories.ts,countQuery.ts,settings/+page.svelte,packs/+page.svelte,debug/+page.svelte— widely reused, so this one is worth fixing first)src/lib/relayListCache.ts:71src/lib/countQuery.ts:48(trailing comment// 394ms - fast and reliable)src/lib/membershipNotificationService.ts:19src/lib/recipePackOg.server.ts:13src/lib/followRecovery.ts:19src/lib/relays/relaySets.ts:23src/lib/relays/relaySets.ts:60(trailing comment// Large general relay)src/lib/stores/groupZapReceipts.ts:17src/lib/marketplace/products.ts:26src/routes/polls/+page.svelte:41src/routes/reads/+page.svelte:593src/routes/api/counts/batch/+server.ts:29(trailing comment// 394ms - fast and reliable)src/routes/api/counts/[eventId]/+server.ts:22src/routes/api/cron/test-notification/+server.ts:111src/routes/api/cron/check-expiring-memberships/+server.ts:78Inline entries (remove just the one array element, keep the line)
src/components/FoodstrFeedOptimized.svelte:455—recipes: ['wss://nos.lol', 'wss://relay.damus.io']→recipes: ['wss://nos.lol']. Also line 452 is a stale benchmark comment namingrelay.damus.io (394ms)— worth trimming for accuracy.src/components/reads/LongformEditorModal.svelte:391—relays: ['wss://relay.primal.net', 'wss://nos.lol', 'wss://relay.damus.io']→ drop the last element.src/lib/authManager.ts:670—relays = ['wss://relay.damus.io', 'wss://nos.lol'];→relays = ['wss://nos.lol'];src/lib/recipePack.ts:31—RECIPE_PACK_RELAY_HINTS = ['wss://relay.damus.io', 'wss://relay.primal.net'];→ drop the first element.src/lib/nourish/nourishPublisher.server.ts:19—PUBLISH_RELAYS = ['wss://nos.lol', 'wss://relay.damus.io', 'wss://relay.primal.net'];→ drop the middle element.Verification
After removal:
grep -rn "relay.damus.io" srcshould return nothing.pnpm run checkshould still pass.