Events
{#if showSidePanel && (searchResults.length > 0 || secondOrderResults.length > 0 || tTagResults.length > 0)}
{searchResultsCollapsed ? "Show Results" : "Hide Results"}
{/if}
{#if showSidePanel}
Close Details
{/if}
Search and explore Nostr events across the network. Find events by:
Event identifiers: nevent, note, naddr, npub, nprofile,
pubkey, or event ID
NIP-05 addresses: username@domain.com
Profile names: Search by display name or username (use
"n:" prefix for exact matches)
D-tags: Find events with specific d-tags using "d:tag-name"
T-tags: Find events tagged with specific topics using
"t:topic"
The page shows primary search results, second-order references
(replies, quotes, mentions), and related tagged events. Click any
event to view details, comments, and relay information.
{#if secondOrderSearchMessage}
{secondOrderSearchMessage}
{/if}
{#if searchResults.length > 0}
{#if searchType === "n"}
Search Results for name: "{searchTerm &&
searchTerm.length > 50
? searchTerm.slice(0, 50) + "..."
: searchTerm || ""}" ({searchResults.length} profiles)
{:else if searchType === "t"}
Search Results for t-tag: "{searchTerm &&
searchTerm.length > 50
? searchTerm.slice(0, 50) + "..."
: searchTerm || ""}" ({searchResults.length}
events)
{:else}
Search Results for d-tag: "{(() => {
const term =
searchTerm ||
(searchType === "d" ? searchValue : "") ||
"";
return term.length > 50 ? term.slice(0, 50) + "..." : term;
})()}" ({searchResults.length} events)
{/if}
{#each searchResults as result, index}
{@const profileData =
(result as any).profileData || parseProfileContent(result)}
handleEventFound(result)}
>
{searchType === "n" ? "Profile" : "Event"}
{index + 1}
Kind: {result.kind}
{#if profileData?.isInUserLists}
{:else if result.pubkey && communityStatus[result.pubkey]}
{:else}
{/if}
{@render userBadge(
toNpub(result.pubkey) as string,
profileData?.display_name || profileData?.name,
)}
{result.created_at
? new Date(
result.created_at * 1000,
).toLocaleDateString()
: "Unknown date"}
{#if result.kind === 0 && profileData}
{#if profileData.picture}
{
(e.target as HTMLImageElement).style.display =
"none";
(
e.target as HTMLImageElement
).nextElementSibling?.classList.remove(
"hidden",
);
}}
/>
{:else}
{/if}
{#if profileData.display_name || profileData.name}
{profileData.display_name || profileData.name}
{/if}
{#if profileData.about}
{profileData.about}
{/if}
{:else}
{#if getSummary(result)}
{getSummary(result)}
{/if}
{#if getDeferralNaddr(result)}
Read
{
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}}
onkeydown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}
}}
tabindex="0"
role="button"
>
{getDeferralNaddr(result)}
{/if}
{#if isAddressableEvent(result)}
{/if}
{#if result.content}
{#if repostKinds.includes(result.kind)}
{result.kind === 6 ? 'Repost:' : 'Generic repost:'}
{@render repostContent(result.content)}
{:else if result.kind === 1 && result.getMatchingTags("q").length > 0}
Quote repost:
{@render quotedContent(result, [], ndk)}
{#if result.content && result.content.trim()}
Comment:
{@render basicMarkup(result.content.slice(0, 100) + (result.content.length > 100 ? "..." : ""), ndk)}
{/if}
{:else}
{@render basicMarkup(result.content.slice(0, 200) + (result.content.length > 200 ? "..." : ""), ndk)}
{/if}
{/if}
{/if}
{/each}
{/if}
{#if secondOrderResults.length > 0}
Second-Order Events (References, Replies, Quotes) ({secondOrderResults.length}
events)
{#if (searchType === "n" || searchType === "d") && secondOrderResults.length === 100}
Showing the 100 newest events. More results may be available.
{/if}
Events that reference, reply to, highlight, or quote the
original events.
{#each secondOrderResults as result, index}
{@const profileData =
(result as any).profileData || parseProfileContent(result)}
handleEventFound(result)}
>
Reference {index + 1}
Kind: {result.kind}
{#if result.pubkey && communityStatus[result.pubkey]}
{:else}
{/if}
{@render userBadge(
toNpub(result.pubkey) as string,
profileData?.display_name || profileData?.name,
)}
{result.created_at
? new Date(
result.created_at * 1000,
).toLocaleDateString()
: "Unknown date"}
{getReferenceType(
result,
originalEventIds,
originalAddresses,
)}
{#if result.kind === 0 && profileData}
{#if profileData.picture}
{
(e.target as HTMLImageElement).style.display =
"none";
}}
/>
{:else}
{(
profileData.display_name ||
profileData.name ||
result.pubkey.slice(0, 1)
).toUpperCase()}
{/if}
{#if profileData.display_name || profileData.name}
{profileData.display_name || profileData.name}
{/if}
{#if profileData.about}
{profileData.about}
{/if}
{:else}
{#if getSummary(result)}
{getSummary(result)}
{/if}
{#if getDeferralNaddr(result)}
Read
{
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}}
onkeydown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}
}}
tabindex="0"
role="button"
>
{getDeferralNaddr(result)}
{/if}
{#if isAddressableEvent(result)}
{/if}
{#if result.content}
{#if repostKinds.includes(result.kind)}
{result.kind === 6 ? 'Repost:' : 'Generic repost:'}
{@render repostContent(result.content)}
{:else if result.kind === 1 && result.getMatchingTags("q").length > 0}
Quote repost:
{@render quotedContent(result, [], ndk)}
{#if result.content && result.content.trim()}
Comment:
{@render basicMarkup(result.content.slice(0, 100) + (result.content.length > 100 ? "..." : ""), ndk)}
{/if}
{:else}
{@render basicMarkup(result.content.slice(0, 200) + (result.content.length > 200 ? "..." : ""), ndk)}
{/if}
{/if}
{/if}
{/each}
{/if}
{#if tTagResults.length > 0}
Search Results for t-tag: "{searchTerm ||
(searchType === "t" ? searchValue : "")}" ({tTagResults.length}
events)
Events that are tagged with the t-tag.
{#each tTagResults as result, index}
{@const profileData =
(result as any).profileData || parseProfileContent(result)}
handleEventFound(result)}
>
Tagged Event {index + 1}
Kind: {result.kind}
{#if result.pubkey && communityStatus[result.pubkey]}
{:else}
{/if}
{@render userBadge(
toNpub(result.pubkey) as string,
profileData?.display_name || profileData?.name,
)}
{result.created_at
? new Date(
result.created_at * 1000,
).toLocaleDateString()
: "Unknown date"}
{#if result.kind === 0 && profileData}
{#if profileData.picture}
{
(e.target as HTMLImageElement).style.display =
"none";
}}
/>
{:else}
{(
profileData.display_name ||
profileData.name ||
result.pubkey.slice(0, 1)
).toUpperCase()}
{/if}
{#if profileData.display_name || profileData.name}
{profileData.display_name || profileData.name}
{/if}
{#if profileData.about}
{profileData.about}
{/if}
{:else}
{#if getSummary(result)}
{getSummary(result)}
{/if}
{#if getDeferralNaddr(result)}
Read
{
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}}
onkeydown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
e.stopPropagation();
navigateToPublication(
getDeferralNaddr(result) || "",
);
}
}}
tabindex="0"
role="button"
>
{getDeferralNaddr(result)}
{/if}
{#if isAddressableEvent(result)}
{/if}
{#if result.content}
{#if repostKinds.includes(result.kind)}
{result.kind === 6 ? 'Repost:' : 'Generic repost:'}
{@render repostContent(result.content)}
{:else if result.kind === 1 && result.getMatchingTags("q").length > 0}
Quote repost:
{@render quotedContent(result, [], ndk)}
{#if result.content && result.content.trim()}
Comment:
{@render basicMarkup(result.content.slice(0, 100) + (result.content.length > 100 ? "..." : ""), ndk)}
{/if}
{:else}
{@render basicMarkup(result.content.slice(0, 200) + (result.content.length > 200 ? "..." : ""), ndk)}
{/if}
{/if}
{/if}
{/each}
{/if}
{#if !event && searchResults.length === 0 && secondOrderResults.length === 0 && tTagResults.length === 0 && !searchValue && !searchInProgress}
Publish Nostr Event
Create and publish new Nostr events to the network. This form
supports various event kinds including:
Kind 30040: Publication indexes that organize AsciiDoc
content into structured publications
Kind 30041: Individual section content for publications
Other kinds: Standard Nostr events with custom tags
and content
{/if}