Community

Apps

DTAN

DTAN is a NIP-35 torrent index on Nostr: a web client and server stack for publishing torrent metadata, browsing categories and constructing magnet links without storing torrent files on Nostr.

DTAN icon
Apps The product layer Clients, signers, publishing tools, wallets and protocol utilities.
Back to Nostr
Apps

Apps shelf

Apps pages collect clients, signers, tools, developer libraries and product research without turning the app into the whole network.

Apps All Apps pages App routeProduct profiles, categories, tools and source links Browse appsClose shelf

App orientation

App categories

App profiles

0xchatadvanced-nostr-searchAegisAlbyAlby GoAlby HubAlby HubAlby SDKAmberAmberAmethystAmethystApp and product researchApplication-specific dataBlossomBlossom spec NIP-B7BookstrBorisBouquetCalendar by FormstrChachiNostr Apps DirectoryCoracleCoracleCorny ChatCreatrDamusDamusDeveloper stack researchDittoDittodiVineDocstrDTANEmojitoFlotillaFlycatFormstrFountainFreeFromFundstrfutrGIF BuddyGittrgo-nostrGossipGossipGrimoireGroups NIP-29HablaHablaHello Nostr — ResourcesHighlighterHiveTalkhomebrew-nostrHORNET StorageHugo2NostrHyperNoteIrisIrisJumblekanbanstrKeys BandListrLNBits NostrmarketLumeLumilumiLUMINAMapstrMarmot Protocolmatrix-nostr-bridgeMeetstrMemestrMindsmonstrmostardMostronaknak — Nostr Army KnifeNalgorithmNarrnashboardNDKNegentropyngitNofluxNosNos Socialnos2xnosbinnosclNostorg Feature MatrixNostr App ManagerNostr Apps Directory GuideNostr clients feature listNostr Compass — ProjectsNostr Developer GuideNostr Development KitNostr Events MonitorNostr MCP ServerNostr NestsNostr PlaygroundNostr Service ProvidersNostr Writernostr-post-checkernostr-protocol/nostrnostr-rubynostr-sdknostr-sdk-ffinostr-sdk-flutternostr-to-rssnostr-toolsNostr.bandnostr.buildnostr.co.uk ClientsNostr.how — Clientsnostr.hsNostrabilityNostrAppsNostrApps category — AudioNostrApps category — CareerNostrApps category — CommunityNostrApps category — CurationNostrApps category — Direct MessageNostrApps category — DiscoveryNostrApps category — File SharingNostrApps category — Group ChatNostrApps category — MeatspaceNostrApps category — OnboardingNostrApps category — SignersNostrApps category — Toolsnostrchecknostrdbnostrdb-rsNostreeNostreonNostriaNostridNostrium / read.nostr.comNostrmoNostrubenoStrudelnoStrudelNostterNosturNosturNotedeckNpub.proNpub.worldnsec.appnsiteNsiteNstart.meObsidian Nostr WriterOlasOpenvibeOracoloOstrich WorkOwn Your PostsP2P BandPazPeridotPhoenixPlebeian MarketPostizPostr / write.nostr.comPrimalPrimalPrimal Article Editor / Reads authoringPrimal Studiopynostrpython-nostrRecommended Application HandlersRelay Toolsrsslayrust-nostrrust-nostr docsSatelliteSatellite EarthSatlantisSatShootShakespeareShopstrSlidestrSnortSnortStemstrswift-nostr-clientTreasuresWavlakeWavlakeWikifreediaWikistrYakiHonneYakiHonneYakiHonne mobile/web app directoryYondar

App pages

Deep dives

Field guides

Awesome Nostr branches

Research and library

Source inventory

Deep Research: Clients, apps and product surfacesDeep Research: Developer stack and toolingResearch Map: nostrapps.comResearch Source: 0xchatResearch Source: 0xchat — NostrApps pageResearch Source: advanced-nostr-searchResearch Source: Aegis — NostrApps pageResearch Source: AlbyResearch Source: Alby — NostrApps pageResearch Source: Alby GoResearch Source: Alby HubResearch Source: Alby Hub GitHubResearch Source: Alby SDKResearch Source: AmberResearch Source: Amber — NostrApps pageResearch Source: AmethystResearch Source: Amethyst GitHubResearch Source: Awesome Nostr ResourcesResearch Source: BookstrResearch Source: BorisResearch Source: Boris — NostrApps pageResearch Source: BouquetResearch Source: Bouquet — NostrApps pageResearch Source: Calendar by FormstrResearch Source: ChachiResearch Source: Chachi — NostrApps pageResearch Source: CoracleResearch Source: Coracle — NostrApps pageResearch Source: Corny ChatResearch Source: DamusResearch Source: Damus — NostrApps pageResearch Source: DittoResearch Source: Ditto — NostrApps pageResearch Source: DocstrResearch Source: DTANResearch Source: DTAN — NostrApps pageResearch Source: EmojitoResearch Source: Emojito — NostrApps pageResearch Source: Flotilla — NostrApps pageResearch Source: FlycatResearch Source: FormstrResearch Source: Formstr — NostrApps pageResearch Source: FountainResearch Source: FreeFromResearch Source: FreeFrom — NostrApps pageResearch Source: FundstrResearch Source: futrResearch Source: futr — NostrApps pageResearch Source: GIF BuddyResearch Source: GIF Buddy — NostrApps pageResearch Source: GittrResearch Source: go-nostr GitHubResearch Source: GossipResearch Source: Gossip — NostrApps pageResearch Source: GrimoireResearch Source: Grimoire — NostrApps pageResearch Source: HablaResearch Source: Habla — NostrApps pageResearch Source: Hello Nostr — ResourcesResearch Source: HighlighterResearch Source: HiveTalkResearch Source: HORNET Storage — NostrCompassResearch Source: IrisResearch Source: Iris — NostrApps pageResearch Source: JumbleResearch Source: Jumble — NostrApps pageResearch Source: Keys BandResearch Source: Keys Band — NostrApps pageResearch Source: ListrResearch Source: LNBits NostrmarketResearch Source: LumeResearch Source: LumilumiResearch Source: LUMINAResearch Source: MapstrResearch Source: Marmot ProtocolResearch Source: MeetstrResearch Source: MemestrResearch Source: MindsResearch Source: monstr GitHubResearch Source: mostardResearch Source: MostroResearch Source: my.nostr.comResearch Source: nak — Nostr Army KnifeResearch Source: nak GitHubResearch Source: NalgorithmResearch Source: Narr — NostrApps pageResearch Source: nashboardResearch Source: NDK GitHubResearch Source: NDK NPMResearch Source: NegentropyResearch Source: Noflux — NostrApps pageResearch Source: Nos SocialResearch Source: Nos Social — NostrApps pageResearch Source: nos2xResearch Source: nos2x — NostrApps pageResearch Source: nosbinResearch Source: noscl GitHubResearch Source: Nostorg Feature MatrixResearch Source: Nostr App ManagerResearch Source: Nostr Book — KindsResearch Source: Nostr DesignResearch Source: Nostr Developer GuideResearch Source: Nostr NestsResearch Source: Nostr Nests — NostrApps pageResearch Source: Nostr PlaygroundResearch Source: nostr-post-checkerResearch Source: nostr-protocol/nostr GitHubResearch Source: nostr-sdk crates.ioResearch Source: nostr-sdk-ffi GitHubResearch Source: nostr-tools GitHubResearch Source: nostr-tools NPMResearch Source: Nostr.BandResearch Source: nostr.buildResearch Source: nostr.co.uk ClientsResearch Source: Nostr.howResearch Source: Nostr.how — ClientsResearch Source: Nostr.how — ProtocolResearch Source: Nostr.how — What is Nostr?Research Source: Nostr.orgResearch Source: NostrabilityResearch Source: NostrAppsResearch Source: NostrApps category — AudioResearch Source: NostrApps category — CareerResearch Source: NostrApps category — CommunityResearch Source: NostrApps category — CurationResearch Source: NostrApps category — Direct MessageResearch Source: NostrApps category — DiscoveryResearch Source: NostrApps category — File SharingResearch Source: NostrApps category — Group ChatResearch Source: NostrApps category — MeatspaceResearch Source: NostrApps category — OnboardingResearch Source: NostrApps category — SignersResearch Source: NostrApps category — ToolsResearch Source: nostrcheckResearch Source: nostrdb GitHubResearch Source: NostreeResearch Source: Nostree — NostrApps pageResearch Source: NostriaResearch Source: Nostria — NostrApps pageResearch Source: NostridResearch Source: Nostrmo — NostrApps pageResearch Source: Nostrmo GitHubResearch Source: NostrubeResearch Source: noStrudelResearch Source: noStrudel — NostrApps pageResearch Source: NostterResearch Source: NosturResearch Source: Nostur — NostrApps pageResearch Source: NotedeckResearch Source: Npub.proResearch Source: Npub.worldResearch Source: nsec.appResearch Source: NsiteResearch Source: Nstart.meResearch Source: Nstart.me — NostrApps pageResearch Source: Obsidian Nostr Writer — NostrApps pageResearch Source: OlasResearch Source: Olas — NostrApps pageResearch Source: OpenvibeResearch Source: OracoloResearch Source: Oracolo — NostrApps pageResearch Source: Ostrich WorkResearch Source: P2P BandResearch Source: PazResearch Source: PeridotResearch Source: Peridot — NostrApps pageResearch Source: PhoenixResearch Source: Phoenix — NostrApps pageResearch Source: Plebeian MarketResearch Source: Plebeian Market — NostrApps pageResearch Source: PrimalResearch Source: Primal — NostrApps pageResearch Source: Primal Article Editor / Reads authoringResearch Source: Primal StudioResearch Source: pynostr GitHubResearch Source: python-nostr GitHubResearch Source: Registry of KindsResearch Source: Relay Tools — NostrApps pageResearch Source: rsslayResearch Source: rust-nostr docsResearch Source: rust-nostr GitHubResearch Source: SatelliteResearch Source: SatShootResearch Source: ShakespeareResearch Source: Shakespeare — NostrApps pageResearch Source: ShopstrResearch Source: Shopstr — NostrApps pageResearch Source: SlidestrResearch Source: SnortResearch Source: start.nostr.netResearch Source: StemstrResearch Source: TreasuresResearch Source: WavlakeResearch Source: WikifreediaResearch Source: Wikifreedia — NostrApps pageResearch Source: WikistrResearch Source: Wikistr — NostrApps pageResearch Source: YakiHonne mobile/web app directoryResearch Source: YondarResearch Source: Yondar — NostrApps page
Apps16 min readNIP-35 torrent index

DTAN

DTAN is a NIP-35 torrent index on Nostr: a web client and server stack for publishing torrent metadata, browsing categories and constructing magnet links without storing torrent files on Nostr.

The quick readDTAN means Distributed Torrent Archive on Nostr. It does not put files on Nostr. It turns torrent metadata into signed NIP-35 events, lets relays carry the index, then hands the actual fetching back to magnet links, trackers and BitTorrent.

The directory is not the archive

DTAN is one of those Nostr apps that looks small until you ask the right question. At first glance it is a torrent directory: browse categories, search, open a detail page, copy a magnet link. That sounds almost too familiar. The interesting part is where the directory lives. A normal torrent index is a website with a database behind it. If the site disappears, the map disappears with it. DTAN asks a different question: what if the map is made of signed Nostr events that other relays and clients can carry?

That does not make DTAN magic. It does not seed files for you. It does not turn legal risk into mist. It does not make every torrent healthy. What it does is narrower and better defined: it indexes torrent metadata. A DTAN entry can contain a title, a description, file names and sizes, tracker URLs, category tags and external database references. From that, the app can construct a magnet link. The data that says "this torrent exists" can move through Nostr; the actual content moves through BitTorrent.

This distinction matters because it keeps the product honest. Nostr is not being used as a file dump. It is being used as a public, signed, relay-distributed catalog layer. If you are trying to understand what Nostr can do beyond social notes, DTAN is a useful specimen. It shows the protocol as a shared index for things that live elsewhere.

The public trail points to dtan.xyz for the running client and to the v0l/dtan repository for the code. The project name is spelled out in the README as Distributed Torrent Archive on Nostr. As of this review on June 6, 2026, the GitHub repository is public, owned by v0l, describes itself as a torrent index on Nostr, uses TypeScript as its primary language, links back to dtan.xyz, and carries the topics Nostr, torrent and censorship-resistance.

What DTAN actually publishes

The center of DTAN is NIP-35. The spec defines torrent events as kind 2003. That event is not a torrent file. It is enough metadata to search, display and build a magnet link. The crucial tag is x, the BitTorrent info hash used in magnet:?xt=urn:btih:.... Other tags can describe files, trackers, categories and external IDs.

Read that slowly and DTAN becomes much easier to judge. The event can say: here is the title, here is the info hash, here are the files, here are optional trackers, here is a category such as video/movie/4k, and here are IDs that point to IMDb, TMDB, TVDB, MyAnimeList, AniList or Newznab. That is why DTAN pages can feel closer to a library card than to a raw swarm. The card can be indexed, searched and discussed even though the files themselves are not present on the Nostr network.

The DTAN client implements this model directly. Its NostrTorrent model reads tags from an event, tracks the info hash, file list, trackers, labels and proof-of-work value, and builds a magnet link. If an event has no trackers, the client can fall back to a small built-in tracker list. It also maps several external ID types into normal web links, so an event can connect a torrent entry to a movie, anime or catalog record without turning that outside database into DTAN's source of truth.

The official NIP also defines torrent comments. DTAN's detail screen leans into that social layer: it can show the publisher profile, the file tree, related torrents, comments, zaps when a Lightning address is available, and an option to copy the raw JSON event. That last button is not glamorous, but it is very Nostr. It says: the object is not hidden inside a private database. It is an event you can inspect.

The client: search, import, sign

The web client is built like a modern Nostr app, not like an old torrent forum with a protocol sticker glued on top. The public package file shows a TypeScript, React and Vite stack, run with Bun scripts, React Router, Tailwind, and Snort's Nostr system libraries. It uses @snort/system, @snort/system-react and @snort/worker-relay, plus hashing, markdown and QR code packages. There is also a deployment script for Cloudflare Pages via Wrangler, though the live project you see is the DTAN site itself.

The route map is simple in the good way: home, profile, new torrent, torrent detail, search, categories, relays and login. The home page browses the top categories. The search page asks Nostr relays for kind 2003 events, can apply search text, category tags and label filters, and includes a relay for search alongside the user's configured relays. The default relay list in the code includes wss://nos.lol/, wss://relay.damus.io/, wss://relay.primal.net/, wss://relay.snort.social/ and wss://relay.dtan.xyz.

The most revealing screen is the new-torrent flow. DTAN can import a .torrent file in the browser, bdecode it, compute the SHA-1 info hash from the torrent's info section, pull out the file list, title, comment and trackers, then let the publisher choose categories and external labels. If the file list is enormous, the client truncates it rather than making a giant event unreadable. When you publish, DTAN creates a NIP-35 event, signs it with your Nostr identity, broadcasts it, and routes you to the new torrent event page.

The login code is also worth noticing. DTAN supports NIP-07 browser signing, NIP-46 remote signing and direct nsec/private-key login. From a user-safety point of view, that list should make you pause. NIP-07 or NIP-46 is the cleaner path for most people because the site does not need your raw secret key. Direct nsec login may be convenient, but convenience is not the same as good key custody. If you use DTAN seriously, use a signer setup you understand.

DTAN also has a Web of Trust flavor through the Snort system setup: it initializes a Nostr system, can build a follow graph, and sets the WoT root to the logged-in public key. That is an important clue about the intended experience. A decentralized directory still needs ways to sort trust, spam and relevance. Without that, a public index becomes noise very quickly.

The server: relay, replica, DHT

There is a second half to DTAN, and it is the half that makes the project more than a web UI. DTAN Server is a Rust project described as a DTAN server and P2P relay. Its README calls it a self-replicating torrent index built on Nostr. The server acts as a Nostr relay for torrent metadata and as a DHT node for peer discovery. In plain terms: it can store and serve the index while also participating in the BitTorrent discovery layer.

The Umbrel App Store listing makes the same point from a self-hosting angle. It lists DTAN Server as a Nostr-based torrent distribution network, version v0.2.0, developed by v0l and submitted by Kieran. Umbrel describes it as a specialized Nostr relay for NIP-35 torrents that combines relay behavior with DHT-based peer discovery and ships with a DTAN web UI for managing torrents and monitoring the relay.

The Rust code is compact and specific. Its package file uses Rust edition 2024 and depends on v0l's nostr-sdk fork, nostr-lmdb, nostr-relay-builder, Tokio, Hyper, Clap, Serde, SHA-1, Mainline DHT and port mapping tools. The main server accepts torrent events, torrent comments, metadata and relay lists, and also follows comments and zap receipts tagged back to torrent events. It can store events in LMDB, connect to bootstrap relays, sync historical events, subscribe for live ones, notify its local relay, and run an HTTP/WebSocket server.

There is a small but important write policy in the server. It can reject event kinds outside the torrent-related set, and it can optionally enforce one torrent event per info hash. That is not a total moderation system, but it shows the project thinking about a directory problem that every index eventually hits: duplicates. A torrent index is not only about finding more. It is also about preventing the map from becoming unusable.

The sample config tells you how it expects to live in the world. It stores data locally, listens on port 8000 by default, can serve the DTAN web build, and bootstraps from relays such as Damus, nos.lol, nostr.band and Snort. It can use DHT peer discovery unless disabled. You can run it from Cargo, from Docker, or as an Umbrel app. That makes DTAN an app for readers, but also a small infrastructure piece for people who want to help replicate the index.

Why this is uncomfortable and useful

DTAN sits in an uncomfortable zone, which is exactly why it is worth writing about carefully. Torrents are not illegal by nature. They are a distribution method. They can move Linux ISOs, public-domain archives, open datasets, game patches, independent media and plenty of things that should not be distributed. A torrent index can point toward lawful material or unlawful material. The protocol does not know the difference. People, relays and law do.

So the adult reading of DTAN is not "cool, censorship resistance." The adult reading is: DTAN separates index, identity, storage, discovery and transfer. The index is Nostr. The publisher is a public key. The content transfer is BitTorrent. The relay may accept or reject events. The DHT may help find peers. Trackers may be present or absent. Seeders may exist or not. The legal responsibility does not disappear just because the catalog entry is an event.

That separation is useful even if you never touch a questionable torrent. It gives builders a pattern. Nostr can be a coordination layer for external resources: signed records, comments, zaps, profiles, relay replication and cross-client visibility. The files, payments, playback, storage or delivery can happen somewhere else. DTAN happens to apply that pattern to torrents, but the lesson is larger than torrents.

It also shows why Nostr apps should not all be judged by the same yardstick. A microblog client lives or dies by conversation flow. A signer lives or dies by permission clarity. A marketplace lives or dies by trust and settlement. DTAN lives or dies by metadata quality, relay availability, duplicate handling, search, signer safety and whether another NIP-35 client can understand the events it creates. noStrudel is listed by the NIP as another implementation, which matters because one-app standards are mostly wishes. A second reader is the beginning of a real surface.

What to check before you trust it

If you open DTAN, do not start by asking whether it feels "decentralized." Start with the object. Pick one entry and inspect what is actually there: title, info hash, files, trackers, category tags, external labels, publisher profile and raw event JSON. Then ask whether the magnet link can be built from the event alone. That is the interoperability test.

Next, check relay behavior. Which relays are you reading from? Are you relying on DTAN's relay, your own relay list, a public search relay or a server you run? If one relay drops an event, can another still return it? If you operate DTAN Server, do you understand what you are storing, what you are broadcasting and what policy you want around duplicates or abusive entries?

Then check signer behavior. Publishing an index entry is public. Your pubkey is attached. If you import a torrent and publish it, you are not merely browsing a website; you are signing a Nostr event that can be replicated. Use NIP-07 or NIP-46 when possible. Avoid handing a raw nsec to a web app unless you have made a deliberate, informed decision and the key is disposable enough for that risk.

Finally, check the legal and human side. DTAN is an index, not permission. A magnet link is not a license. A category label is not a safety guarantee. Relays can moderate. Operators can refuse content. Users can publish bad data. The right way to admire DTAN is not to pretend those issues vanish. It is to see how cleanly the project exposes the boundary: here is a signed catalog entry, here is the network that carries it, here is the outside system that moves the bytes, and here is the responsibility that stays with the people using it.

That makes DTAN a sharp little app. It is not broad, warm or beginner-friendly in the way Damus or Primal can be. It is a tool for people who want to see Nostr doing index work in public. If you are mapping the ecosystem, DTAN belongs on the shelf because it stretches the imagination without hiding the machinery.

Sources worth opening

This article keeps claims close to the public project trail. Start with the spec, then open the client and server code so you can see exactly where Nostr stops and BitTorrent begins.

Back to the Crays Nostr page
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

How to use this page

Find the product surface first.

Search clients, signers, product categories or developer tools when you need a specific app, source file or comparison clue.

AppsKeep exploring AppsApp routeProduct profiles, categories, signer guides and source links.Browse apps
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

Bring something back

Ask, suggest, submit or nominate.

Use these links when something is missing, a source is stale, or a public Nostr builder belongs in the map.