The community-driven search engine. Powered by Nostr, owned by no one.
Dsearch is the decentralized search engine built by its users — and the home of an open search-infrastructure ecosystem. One shared index on Nostr, built by everyone who searches, crawls, indexes, or runs a relay. No company owns the crawler, the index, the relay network, or this interface.
Live: dsearch.com
All brand assets live in public/brand/:
| File | What |
|---|---|
icon.svg |
The master mark — vector, scales to any size |
logo.svg |
Horizontal lockup — mark + wordmark + tagline (auto light/dark) |
pwa-icon.png |
PWA / app icon — 1024×1024 dark-tile mark (install, home screen, apple-touch) |
icon-1024.png |
Raster icon 1024×1024 (same mark, avatars / app stores) |
logo-1024.png |
Raster lockup 1024×1024 |
logo-lockup.jpg |
Dark-tile lockup (JPEG) |
favicon.svg |
Browser tab icon (simplified for 16–32px) |
og.jpg |
Social link preview card |
The mark: a magnifying glass revealing a node network shaped like the letter
D — search (the glass) over the decentralized index (the constellation).
Teal #17a398 with deep navy #1b3a7a accent nodes. In the app, every teal
element renders in currentColor, so the logo follows the active theme and
the user's accent color (src/components/LogoMark.tsx).
Dsearch is the flagship engine of a modular stack. Every layer is open, separable, and runnable by anyone:
┌─────────────────┐
│ DSEARCH │ ← this repo
│ Search Engine │
└────────┬────────┘
│
┌────────▼────────┐
│ SIP │
│ Search Protocol │ SIP-01 (documents, v1.2)
└────────┬────────┘ SIP-02 (queries, draft)
│
┌───────────────────┼───────────────────┐
│ │ │
┌─────▼─────┐ ┌────▼─────┐ ┌────▼─────┐
│ CRAWLSTR │ │ INDEXSTR │ │ SIP │
│ crawler │ │ indexer │ │ RELAYS │
└─────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
└──────────────────┼──────────────────┘
│
┌───────▼───────┐
│ DECENTRALIZED │
│ SEARCH INDEX │
└───────────────┘
| Component | Role | Repo | Live |
|---|---|---|---|
| Dsearch | Search engine + ecosystem hub | this repo | dsearch.com |
| SIP-01 | The protocol spec + test vectors | SIP-01 | spec site |
| Crawlstr | Lightweight browser crawler | Crawlstr | crawlstr.vercel.app |
| Indexstr | Heavyweight distributed indexer | indexstr | indexstr.vercel.app |
| SIP Booster Relay | Serverless index relay (Cloudflare) | SIP-Booster-Relay | dashboard |
| UNCAGED Index Relay | Self-hosted index relay (OpenSearch) | UNCAGED-Index-Relay | — |
| Crawlstr SIP Relay | Android index relay | Crawlstr-SIP-Relay | — |
Lineage: Dsearch consolidates several iterations of community search work — 0xSearchstr (the original aggregator) → UNCAGED Engine (the minimal template) → Presearchstr (the community fork) → Dsearch (the independent ecosystem). It is not a rebrand of any single predecessor: it's where the stack becomes one coherent project.
Federation: Dsearch and 0xSearchstr share one index. Same kinds, same tags, different signers. A search on either app warms the index for both.
- Search — the engine: SIP-01 community index first, then 18 parallel providers (Nostr NIP-50, SearXNG, DuckDuckGo, Brave BYOK, Hacker News, wiki, git, Tor…). Keyword staking with your Nostr key.
- Network (
/network) — live view: index relays, crawler heartbeats, latest observations. - Build (
/build) — run a crawler (Crawlstr), an indexer (Indexstr), or a SIP relay. - Protocol (
/protocol) — SIP-01 explained; SIP-02 (query layer) draft area. - Community (
/community) — every repo, every contribution path.
User Search
│
▼
┌─────────────── All providers run in parallel ──────────────┐
│ Web Index (SIP-01) · Legacy Cache · Nostr NIP-50 · Stakes │
│ Community · SearXNG · DuckDuckGo · Brave (BYOK) · HN · │
│ Wiki (NIP-54) · Git (NIP-34) · StackOverflow · Tor · Wiki │
└──────────────────────┬──────────────────────────────────────┘
│
Merge + Deduplicate + Rank (coverage-weighted)
│
▼
Display Results → auto-index surfaced pages (SIP-01)
│
Still nothing? → privacy-respecting fallback links
- Every source is a provider — each returns a universal
SearchResult[] - All providers run in parallel — results stream in as each completes
- The community index scores highest — decentralized results are prioritized
- Auto-indexing — every search contributes surfaced pages back as SIP-01 observations, signed by a per-device pseudonymous keypair (never your identity, never your query)
- Never empty — fallback links to privacy-respecting engines
The search bar parses real search syntax into an AST and executes it locally and authoritatively — operators are never "stripped and hoped for":
"decentralized search" exact phrase site:github.com host + subdomains
nostr AND privacy boolean (UPPERCASE) lang:de language
nostr NOT twitter exclusion tag:nostr exact topic tag
(nostr OR bitcoin) grouping after:2026-01-01 date boundary
This engine is the reference implementation seed for the in-development SIP-02 query-layer specification. Full guide: docs/SEARCH-QUERIES.md.
| Input | What happens |
|---|---|
15% of 80 |
Calculator instant answer — no providers run at all |
npub1… / note1… |
Nostr instant card — clearnet engines never see it |
name@domain.tld |
NIP-05 resolution to a profile card |
https://example.com |
SIP-01 index lookup — only Nostr-tier providers run |
| anything else | Full provider fan-out |
Provider skipping isn't just speed — it's privacy. The honest traffic-light indicator by the search bar shows exactly who can see each query (Nostr relays / direct APIs / proxied engines).
Stake a keyword with your Nostr key — no tokens: sign an addressable event binding a keyword to your link and it takes the top "Community Stake" placement on every compatible client. One stake per keyword per npub; recency-ranked today, zap-weighting-ready by schema.
Everything this app writes is documented in NIP.md and the canonical SIP-01 spec (local copy: docs/SIP-01.md):
- Web document index (
widx:*) — SIP-01, kind 39697, per-device indexer identities - Search cache (
0xsearchstr:cache:*) — federated legacy cache, kind 30078 (frozen, read-only) - Term signals (
0xsearchstr:term:*) — hashed k-anonymity trending (never plaintext queries) - Community submissions (
0xsearchstr:submit:*) — user-curated links - Keyword stakes (
0xsearchstr:stake:*) — Nostr-native keyword placement
The 0xsearchstr:* namespaces are the federation contract shared with 0xSearchstr and every
compatible fork — they are intentionally kept, not legacy accidents.
Application control-plane data (role lists, moderation labels, abuse inboxes, affiliate rules,
invite-friends config) lives in the dsearch:* control plane (src/lib/dsearchProtocol.ts),
rooted at the owner key — never in the shared federation namespaces. Legacy presearchstr:* /
0xsearchstr.* control data stays readable (owner-signed) until migrated. Partner referrals use
pseudonymous per-device keys (kinds 34967 / 6079, t: dsearch-referral).
Four default pools, all user-editable in Settings (hide defaults, add customs, restore):
| Pool | Purpose |
|---|---|
| Index Relays | Where the community index lives — SIP-01 observations, legacy cache, submissions, stakes |
| Search Relays | NIP-50 full-text Nostr search (read-only) |
| Git Relays | NIP-34 repos/issues/PRs for the Code tab (read-only) |
| Wiki Relays | NIP-54 wiki articles (read-only) |
Index and search pools also grow by auto-discovery (NIP-66 announcements + NIP-11
verification; the SIP-01 uncaged_index block earns a relay its index-pool spot).
An optional AI answer layer synthesizes cited answers from the result evidence pack — off by
default, ephemeral, never indexed. Credential precedence: your own key (any
OpenAI-compatible API, Settings → AI) → engine-provided (operator key via the included
Cloudflare worker, /api/ai) → built-in free tier (public, rate-limited by design) →
unavailable. Nostr results are excluded from evidence unless you opt in.
The backend/ directory contains the original 0xSearchstr-era self-hosted stack (Meilisearch +
Nostr/clearnet/Tor crawlers + NIP-50 relay proxy + abuse API, docker compose up -d).
It is superseded in practice by the SIP-01 ecosystem (Crawlstr/Indexstr + SIP relays) and kept
for operators who want it. New infrastructure work targets the SIP stack.
git clone https://github.com/NostrDanish/Dsearch.git
cd Dsearch
npm install
npm run devOpen http://localhost:8080 and search.
React 19 · TypeScript · Vite · TailwindCSS 4 · shadcn/ui · Nostrify · TanStack Query · optional Cloudflare worker (engine AI proxy only)
MIT
Vibed with Shakespeare