magnet URI scheme

{{Short description|Scheme that defines the format of magnet links}}

{{Use dmy dates|date=March 2025}}

{{Multiple issues|

{{more citations needed|date=January 2015}}

{{Technical|date=December 2014}}

}}

File:TPB Magnet Icon.gif]]

Magnet is a URI scheme that defines the format of magnet links, a de facto standard for identifying files (URN) by their content, via cryptographic hash value rather than by their location.

Although magnet links can be used in a number of contexts, they are particularly useful in peer-to-peer file sharing networks because they allow resources to be referred to without the need for a continuously available host, and can be generated by anyone who already has the file, without the need for a central authority to issue them. This makes them popular for use as "guaranteed" search terms within the file sharing community where anyone can distribute a magnet link to ensure that the resource retrieved by that link is the one intended, regardless of how it is retrieved.

History

The standard for Magnet URIs was developed by Bitzi in 2002, partly as a "vendor- and project-neutral generalization" of the ed2k: and freenet: URI schemes used by eDonkey2000 and Freenet (now Hyphanet), respectively, and attempts to follow official IETF URI standards as closely as possible. BitTorrent introduced the btmh: protocol in 2020 as part of its BitTorrent v2 changes.{{cite web |date=2020-09-07 |title=BitTorrent v2 |url=https://blog.libtorrent.org/2020/09/bittorrent-v2/ |url-status=live |archive-url=https://web.archive.org/web/20201030011550/https://blog.libtorrent.org/2020/09/bittorrent-v2/ |archive-date=2020-10-30 |access-date=2020-09-21 |publisher=BitTorrent}}

Format {{anchor|Parameters}}

Magnet URIs consist of a series of one or more parameters, the order of which is not significant, formatted in the same way as query strings that ordinarily terminate HTTP URLs.

The following parameters are supported:

class="wikitable"

!Parameter

!Name

!Description

xt

|eXact Topic

|URN containing file hash. This is the most crucial part of the magnet link, and is used to find and verify the specified file. The URN is specific to the protocol, so a file hash URN under btih (BitTorrent) would be completely different from the file hash URN for ed2k

: xt=urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a

dn

|Display Name

|A filename to display to the user, for convenience.

xl

|eXact Length

|The file size, in bytes

tr

|address TRacker

|Tracker URL; used to obtain resources for BitTorrent downloads without a need for DHT support. The value must be URL encoded.

:tr=http%3A%2F%2Fexample.org%2Fannounce

ws

|Web Seed

|The payload data served over HTTP(S)

as{{Citation needed|date=May 2022}}

|Acceptable Source

|Refers to a direct download from a web server. Regarded as only a fall-back source in case a client is unable to locate and/or download the linked-to file in its supported P2P network(s)

:as=[web link to file(URL encoded)]

xs{{Citation needed|date=May 2022}}

|eXact Source

|Either an HTTP (or HTTPS, FTP, FTPS, etc.) download source for the file pointed to by the Magnet link, the address of a P2P source for the file or the address of a hub (in the case of DC++), by which a client tries to connect directly, asking for the file and/or its sources. This field is commonly used by P2P clients to store the source, and may include the file hash.

: xs=http://[Client Address]:[Port of client]/uri-res/N2R?[ URN containing a file hash ]

: xs=http://192.0.2.27:6346/uri-res/N2R?urn:sha1:FINYVGHENTHSMNDSQQYDNLPONVBZTICF

kt{{Citation needed|date=May 2022}}

|Keyword Topic

|Specifies a string of search keywords to search for in P2P networks, rather than a particular file

:kt=martin+luther+king+mp3

mt{{Citation needed|date=May 2022}}

|Manifest Topic

|Link to the metafile that contains a list of magnets (MAGMA{{spaced ndash}} [https://rakjar.de/gnuticles/MAGMA-Specsv22.txt MAGnet MAnifest]); i.e. a link to a list of links

:mt=http://example.org/all-my-favorites.rss

:mt=urn:sha1:3I42H3S6NNFQ2MSVX7XZKYAYSCX5QBYJ

so{{Cite web |last=Houlihan |first=Tyler |date=2017-05-24 |title=Magnet URI extension - Select specific file indices for download |url=http://bittorrent.org/beps/bep_0053.html |access-date=2024-12-30 |website=BitTorrent.org}}{{Cite web |orig-date=2022-10-23 |title=libtorrent/magnet_uri.cpp at 64817e0e8793d0875fc10245de52ffb2540a223d · arvidn/libtorrent |url=https://github.com/arvidn/libtorrent/blob/64817e0e8793d0875fc10245de52ffb2540a223d/src/magnet_uri.cpp#L302-L501 |url-status=live |archive-url=https://web.archive.org/web/20221104095247/https://github.com/arvidn/libtorrent/blob/64817e0e8793d0875fc10245de52ffb2540a223d/src/magnet_uri.cpp#L302-L501 |archive-date=2022-11-04 |access-date=2022-11-04 |publisher=libtorrent |via=GitHub}}

|Select Only

|Lists specific files torrent clients should download,{{Cite web |date=2017-06-06 |title=BitTorrent Enhancement Proposal 53: Magnet URI extension - Select specific file indices for download |url=https://www.bittorrent.org/beps/bep_0053.html |url-status=live |archive-url=https://web.archive.org/web/20221010161216/https://www.bittorrent.org/beps/bep_0053.html |archive-date=2022-10-10 |access-date=2022-11-04 |website=BitTorrent.org}} indicated as individual or ranges (inclusive) of file indexes.

:so=0,2,4,6-8

x.pe

|PEer

|Specifies fixed peer addresses to connect to. Used to bootstrap discovery of peers in the absence of (e.g.) trackers or DHT.

:x.pe=hostname:port

:x.pe=ipv4-literal:port

:x.pe=[ipv6-literal]:port

The standard also allows for application-specific experimental parameters, which must begin with "x".{{Citation needed|date=May 2022}}

= Exact Topic (xt) =

The xt parameter specifies the URN for a given p2p protocol. Its purpose is to provide a search parameter for finding the metadata to the torrent. This effectively acts as a replacement to a .torrent file, which itself contains the torrent metadata, by instead searching the p2p network (using the URN) for that metadata. Each protocol handles a URN uniquely; for example, xt=urn:btih:FFC7E738EAA4CD4ECF51EC6FD669C6CDE2C281A8 uses the btih (BitTorrent v1 protocol), so a BitTorrent client can take the hash and lookup the torrent's metadata in the BitTorrent DHT.{{Cite web |title=bep_0005.rst_post |url=http://bittorrent.org/beps/bep_0005.html |access-date=2022-05-12 |website=bittorrent.org}} In the case of DHT the client searches through a set of pre-known nodes and requests the metadata for an infohash; those nodes will make the same request to other known nodes until eventually a swarm is found and returned.

xt also allows for a group setting. Multiple files can be included by adding a count number preceded by a dot (".") to each link parameter.{{Citation needed|date=May 2022}}

:magnet:?xt.1=[ URN of the first file]&xt.2=[ URN of the second file]

; Tiger Tree Hash (TTH): These hashes are used on Direct Connect and G2 (Gnutella2), among others.

:xt=urn:tree:tiger:[ TTH Hash (Base32) ]

; Secure Hash Algorithm 1 (SHA-1): These hash sums are used on gnutella and G2 (Gnutella2).

:xt=urn:sha1:[ SHA-1 Hash (Base32) ]

; BitPrint: Such hash sums consist of an SHA-1 Hash, followed by a TTH Hash, delimited by a point; they are used on gnutella and G2 (Gnutella2).

:xt=urn:bitprint:[ SHA-1 Hash (Base32) ].[ TTH Hash (Base32) ]

; ED2K (eDonkey2000) hash: These hash sums are used on eDonkey2000.

:xt=urn:ed2k:[ ED2K Hash (Hex) ]

; Advanced Intelligent Corruption Handler (AICH): Not formal URNs for Magnet links, such hash sums are used by eDonkey2000 to restore and control the integrity of downloading and already downloaded files.

:xt=urn:aich:[ aich Hash (Base32) ]

; Kazaa hash: Used on FastTrack, these hash sums are vulnerable to hash collision attacks.

:xt=urn:kzhash:[ Kazaa Hash (Hex) ]

; BitTorrent info hash (BTIH): These are hex-encoded SHA-1 hash sums of the "info" sections of BitTorrent metafiles as used by BitTorrent to identify downloadable files or sets of files. For backwards compatibility with existing links, clients should also support the Base32 encoded version of the hash.{{Cite web |date=2017-03-26 |title=BitTorrent Enhancement Proposal 9: Extension for Peers to Send Metadata Files |url=http://bittorrent.org/beps/bep_0009.html |url-status=live |archive-url=https://web.archive.org/web/20221010161216/https://www.bittorrent.org/beps/bep_0009.html#magnet-uri-format |archive-date=2022-10-10 |access-date=2022-11-04 |website=bittorrent.org |publication-date=2008-01-31}}

:xt=urn:btih:[ BitTorrent Info Hash (Hex) ]

: Some clients require Base32 of info_hash (e.g., Vuze).

; BitTorrent info hash v2 (BTMH): BitTorrent v2 replaces the obsolete SHA-1 hash with a SHA-256 info hash. The v2 info-hash is given a new prefix (btmh) to allow for torrents that can participate in both v1 and v2 swarms.

:xt=urn:btmh:[1220: (v2 prefix) BitTorrent Info Hash (Hex) ]

; Message Digest 5 (MD5): Supported by G2 (Gnutella2), such hashes are vulnerable to hash collision attacks.

:xt=urn:md5:[ MD5 Hash (Hex) ]

= Supplement format (x.) =

For experimental and self-complementing informal options, the prefix {{code|x.}} followed by a chosen suffix letter can be used. These names are guaranteed to never be standardized.

:x.[name of the new parameter]=[data of the new parameter (URL encoded)]{{Citation needed|date=May 2022}}

Clients

class="wikitable sortable"
Client

! dn

! xl

! xt

! tr

! xs

! as

! kt

! mt

! ws

AMule

| {{yes}}

| {{yes}}

| urn:ed2k:

| {{no}}

| {{unk}}

| {{unk}}

| {{unk}}

| {{unk}}

| {{unk}}

ApexDC++

| {{yes}}

| {{yes}}

| urn:bitprint:
urn:tree:tiger:

| {{no}}

| {{yes|dchub:}}dchub://[hubaddress]:[hubport]

| {{yes|dchub:}}

| {{no}}

| {{no}}

| {{unk}}

BitComet

| {{yes}}

| {{yes}}

| urn:btih:

| {{yes}}

| {{yes}}1.76

| {{no}}

| {{no}}

| {{no}}

| {{yes}}1.74{{cite web |title=v1.74 Core Improve: support ws parameter in Magnet URI, to add web seed |url=https://www.bitcomet.com/en/downloads |website=bitcomet |access-date=2021-04-07 |archive-date=2021-04-10 |archive-url=https://web.archive.org/web/20210410081721/http://www.bitcomet.com/en/downloads |url-status=live }}

Bitflu

| {{yes}}

| {{no}}

| urn:btih:

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{unk}}

Deluge

| {{yes}}

| {{no}}

| urn:btih:

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{unk}}

EiskaltDC++

| {{yes}}

| {{yes}}

| urn:tree:tiger:
urn:bitprint:
urn:btih:Passes link to external software
urn:btmh:

| {{no}}

| {{yes|dchub:}}
adc:adc://[hubaddress]:[hubport]
adcs:adcs://[hubaddress]:[hubport]

| {{yes|dchub:}}

| {{yes}}

| {{no}}

| {{unk}}

FlylinkDC++

| {{yes}}

| {{yes}}

| urn:tree:tiger:
urn:bitprint:
urn:btih:

| {{no}}

| {{yes|dchub:}}
adc:
adcs:

| {{yes|dchub:}}

| {{yes}}

| {{no}}

| {{unk}}

gtk-gnutella

| {{yes}}

| {{yes}}

| urn:sha1:

| {{no}}

| {{yes|http:}}
push:

| {{yes}}

| {{yes}}

| {{no}}

| {{unk}}

KTorrent

| {{yes}}

| {{no}}

| urn:btih:

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{unk}}

LimeWire

| {{yes}}

| {{yes}}

| urn:sha1:

| {{no}}

| {{yes|http:}}
urn:guid:

| {{unk}}

| {{no}}

| {{no}}

| {{unk}}

MonoTorrent

| {{yes}}

| {{yes}}

| urn:btih:

| {{yes}}

| {{no}}

| {{yes}}

| {{no}}

| {{no}}

| {{unk}}

μTorrent

| {{yes}}

| {{no}}

| urn:btih:

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}

qBittorrent

| {{yes}}

| {{yes}}{{cite web |title=Add eXact Length parameter when creating magnet URI |url=https://github.com/qbittorrent/qBittorrent/commit/27451469fa73fecfb93d7c98334f4a40c79b4c19 |website=GitHub |access-date=29 December 2024}}

| urn:btih:
urn:btmh:

| {{yes}}

| {{unk}}

| {{unk}}

| {{no}}

| {{no}}

| {{unk}}

Shareaza

| {{yes}}

| {{yes}}

| urn:bitprint:
urn:btih:
urn:ed2k:
urn:md5:
urn:sha1:
urn:tree:tiger:

| {{yes}}Since v2.5.1.0

| {{yes|http:}}
ftp:

| {{yes|http:}}
ftp:
(Same priority as xs)

| {{yes}}

| {{no}}

| {{unk}}

Tixati

| {{yes}}

| {{yes}}

| urn:btih:

| {{yes}}

| {{yes}}

| {{yes}}

| {{unk}}

| {{unk}}

| {{yes}}

Transmission{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet-test.c?rev=9531 |title=magnet-test.c in trunk/libtransmission; Revision 9531 |publisher=Transmission |access-date=2012-02-04 |archive-date=2012-02-17 |archive-url=https://web.archive.org/web/20120217152203/https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet-test.c?rev=9531 |url-status=live }}{{cite web |url=https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet.c?rev=9979 |title=magnet.c in trunk/libtransmission; Revision 9979 |publisher=Transmission |access-date=2012-02-04 |archive-date=2012-02-17 |archive-url=https://web.archive.org/web/20120217232524/https://trac.transmissionbt.com/browser/trunk/libtransmission/magnet.c?rev=9979 |url-status=live }}

| {{yes}}

| {{no}}

| urn:btih:

| {{yes}}

| {{no}}

| {{no}}

| {{no}}

| {{no}}

| {{yes}}{{cite web |url=https://github.com/transmission/transmission/commit/5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a#diff-05c4e2919dd53eccc714f113e12f821685c9140c9e40491f2a069a2970912396 |title=magnet.c in libtransmission: Commit 5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a |publisher=Transmission |access-date=2021-09-04 |archive-date=2021-09-04 |archive-url=https://web.archive.org/web/20210904042539/https://github.com/transmission/transmission/commit/5c3fd1b5ccc3a8c4ab68e2c56861df31dd1c720a#diff-05c4e2919dd53eccc714f113e12f821685c9140c9e40491f2a069a2970912396 |url-status=live }}

Vuze

| {{yes}}

| {{yes}}

| urn:btih:
urn:sha1:

| {{yes}}

| {{yes}}5.7.5.0

| {{yes}}5.7.5.0

| {{no}}

| {{no}}

| {{yes}}

See also

Explanatory notes

{{Reflist|group=Note}}

References

{{Reflist|30em}}