dnslink resolution in go-ipfs
Switch branches/tags
Nothing to show
Clone or download
Latest commit 6bd705e Mar 7, 2018
Failed to load latest commit information.
dnslink install note Dec 13, 2015
LICENSE license Mar 22, 2016
README.md Fix go get command Mar 6, 2018
dnslink.go v1 Dec 13, 2015
dnslink_test.go v1 Dec 13, 2015



dnslink resolution in go-ipfs

Table of Contents


Package dnslink implements a DNS link resolver. dnslink is a basic standard for placing traversable links in DNS itself. See dnslink.info

A dnslink is a path link in a DNS TXT record, like this:


For example:

> dig TXT ipfs.io
ipfs.io.  120   IN  TXT  dnslink=/ipfs/QmR7tiySn6vFHcEjBeZNtYGAFh735PJHfEMdVEycj9jAPy

This package eases resolving and working with thse DNS links. For example:

import (
  dnslink "github.com/jbenet/go-dnslink"

link, err := dnslink.Resolve("ipfs.io")
// link = "/ipfs/QmR7tiySn6vFHcEjBeZNtYGAFh735PJHfEMdVEycj9jAPy"

It even supports recursive resolution. Suppose you have three domains with dnslink records like these:

> dig TXT foo.com
foo.com.  120   IN  TXT  dnslink=/dns/bar.com/f/o/o
> dig TXT bar.com
bar.com.  120   IN  TXT  dnslink=/dns/long.test.baz.it/b/a/r
> dig TXT long.test.baz.it
long.test.baz.it.  120   IN  TXT  dnslink=/b/a/z

Expect these resolutions:

dnslink.ResolveN("long.test.baz.it", 0) // "/dns/long.test.baz.it"
dnslink.Resolve("long.test.baz.it")     // "/b/a/z"

dnslink.ResolveN("bar.com", 1)          // "/dns/long.test.baz.it/b/a/r"
dnslink.Resolve("bar.com")              // "/b/a/z/b/a/r"

dnslink.ResolveN("foo.com", 1)          // "/dns/bar.com/f/o/o/"
dnslink.ResolveN("foo.com", 2)          // "/dns/long.test.baz.it/b/a/r/f/o/o/"
dnslink.Resolve("foo.com")              // "/b/a/z/b/a/r/f/o/o"


go get github.com/ipfs/go-dnslink


As a library

import (

  dnslink "github.com/jbenet/go-dnslink"

func main() {
  link, err := dnslink.Resolve("ipfs.io")
  if err != nil {

  fmt.Println(link) // string path

As a commandline tool

Check out the commandline tool, which works like this:

> dnslink ipfs.io


Feel free to join in. All welcome. Open an issue!

This repository falls under the IPFS Code of Conduct.

Want to hack on IPFS?


MIT © Juan Benet-Batiz