InterPlanetary File System

Last edited: July 31, 2023 - 3 minutes read


How to host your website on ipfs.


The InterPlanetary File System is a protocol, hypermedia and file sharing peer-to-peer network for storing and sharing data in a distributed file system.

1. Hosting on ipfs

After you have ipfs installed in your system, you will need to initialize your node.

$ ipfs init

Create a directory where your website files will be stored such as my-ipfs-website. Within it, write a simple index.html file with the following content:

<!DOCTYPE html>
<html lang="en">

We are now ready to start hosting our content on ipfs. Let’s add (and pin) the file we’ve just created on our node by running:

$ ipfs add index.html

if your index.html is the same as the one provided you should get output that looks exactly like this:

added QmWoKHuKnRYYAjFXTfYTNAv7notts7Lheozkvf8agCKwuE index.html
 121 B / 121 B [=======================================================] 100.00%

Your page is now hosted on ipfs with the CID: QmWoKHuKnRYYAjFXTfYTNAv7notts7Lheozkvf8agCKwuE

2. Reading from ipfs

Now that your content is hosted on ipfs you can access it by running:

$ ipfs cat QmWoKHuKnRYYAjFXTfYTNAv7notts7Lheozkvf8agCKwuE

or by navigating to on your browser.


By using IPNS we will be able to change the content of our website while only keeping track of a single name. Let’s add my-ipfs-website to ipfs:

$ ipfs add -r .

If you’ve been following along so far the output should look like:

added QmWoKHuKnRYYAjFXTfYTNAv7notts7Lheozkvf8agCKwuE my-ipfs-website/index.html
added QmdHZPZV8aMjrCMvYfksgfbkQd1bKkYZAKM5K4GrVTRuwq my-ipfs-website
 121 B / 121 B [=======================================================] 100.00%

We can now publish all the content of my-ipfs-website with the CID: QmdHZPZV8aMjrCMvYfksgfbkQd1bKkYZAKM5K4GrVTRuwq to IPNS by running:

$ ipfs name publish QmdHZPZV8aMjrCMvYfksgfbkQd1bKkYZAKM5K4GrVTRuwq

This will use your node’s private key. Your output will be slightly different but similar to:

Published to k51qzi5uqu5dgb363ilzyyyj360gspxvm2uj0jrtdnktowmu8318z6tpxsfvqj:

By running the previous two commands each time you make changes to your website, you can ensure that

Name: k51qzi5uqu5dgb363ilzyyyj360gspxvm2uj0jrtdnktowmu8318z6tpxsfvqj

always has the latest version of your content.

4. DNSLink (Bonus)

If you have a domain name on the web already you can point it to IPFS by adding a TXT record to your domain similar to:


Making sure to edit with your own domain name and k51qzi5uqu5dgb363ilzyyyj360gspxvm2uj0jrtdnktowmu8318z6tpxsfvqj with the name you got from your previous command.

5. Pinata (Bonus)

So far, your content is only hosted on your personal ipfs node. By using a pinning service like pinata you can ensure your content remains accessible on ipfs even when your node is down.

Start by navigating to pinata, registering an account and creating an API key making sure to take note of your JWT token.

From there simply add your pinata credentials to ipfs:

$ ipfs pin remote service add pinata [JWT]

You can now use the following command to pin your website to pinata:

$ ipfs pin remote add --service=pinata --name=my-ipfs-website QmdHZPZV8aMjrCMvYfksgfbkQd1bKkYZAKM5K4GrVTRuwq
< Prev: Hugo BackNext: PiHole >
comments powered by Disqus