The Inter-Planetary File System, or “IPFS”, is one of the most amazing technologies I’ve ever seen.
The IPFS lets you store your files permanently by backing them up on computers around the world. And it lets you download your files faster. Let me explain.
Let’s say your company creates a critical 1-hour video clip daily, which millions of consumers watch daily and retroactively. This would be an expensive endeavor! You’ll need to buy a lot of bandwidth and storage space.
And if your videos are truly critical, then they should be accessible no matter what. However, with today’s HTTP protocol, the videos are accessible only so long as your servers are running and consumers can retrieve the data amidst busy traffic.
But what if the video files were distributed throughout the world so that they could never be lost? What if you could retrieve pieces of the video files quickly from your neighbors’ computers instead of traveling to a server across the world? What if you could also update, rename, and set permissions on these files while they sit remotely, stored throughout the universe?
Well then you would have a decentralized, more permanent internet. One where links never return 404 errors, and one where we’re not reliant on Amazon, Google, Facebook, and Apple’s servers. It’s like the HTTP web + Git + BitTorrent.
This is the future promised by the Inter-Planetary File System.
How do I save a file to IPFS?
The way you interact with IPFS today is through a command-line interface. This can be a new experience to non-programmers, so I’ve written this step-by-step guide to upload your first file to the IPFS¹.
Step 1: Download and Install IPFS for your Platform
This one is easy, just follow this link to IPFS’ website and download.
Step 2: Move the Executable File to its Proper Location
You just downloaded a compressed folder. Now we must extract the contents, and place the
ipfs file in the
%PATH% (Read this on PATH if confused). Instructions begin to differ between Mac/Linux and Windows operating systems:
After downloading, unpack the archived folder, and move the
ipfs file somewhere in your
$PATH. To do this via Terminal:
sudo mv ipfs /usr/local/bin/ipfs
After downloading, unzip the archive, and then cut
ipfs.exe and paste somewhere in your
%PATH%. You can also complete this via Command Prompt:
[Win + "cmd" -> right-click -> Run as Administrator]
C:\Users\yourName\Downloads>move .\go-ipfs\ipfs.exe C:\Windows
Step 3: Initialize IPFS
Great job so far! At this point you must open your command-line interface to continue. On a Mac, search for
terminal, for Windows, search for
Now, confirm that you have properly moved the executable file by typing
ipfs and hitting Return. You should see the following:
ipfs - Global p2p merkle-dag filesystem.
Everything is installed properly, so it is time to
init your IPFS repository². Type:
ipfs init and hit Return. You will see something similar to this:
$ ipfs init
initializing ipfs node at /Users/yourName/.ipfs
generating 2048-bit RSA keypair...done
peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z
to get started, enter:
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
Go ahead and follow the instructions: copy and paste
ipfs cat /ipfs/QmY...bdG/readme and you should see something like the following³.
Hello and Welcome to IPFS!
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
Step 4: Add a File to IPFS
Now we’re ready to add our first file to IPFS! 🎉
First, in the terminal, you want to "change directories” to get to the folder where your files reside. To change directories, type
cd c:/yourPathHere (video tutorial here). I’m going to grab a folder called
rare in my Pictures folder.
I’m going to add to IPFS the folder storing the picture to the left (
rare.jpg) and another sample.
See how easy this is below:
$ ipfs add rare -r
added QmUbTW9iDRz4XgbHc62viUDSM76i1n52frG8HqqyarfMQk rare/XXX.jpg
added QmRuzPpc1tjJ5TbhG7B2Ato8LtaY2DK2Y5DMWWb29cqFF5 rare/rare.jpg
added QmdNMBVqQJ9baQDAJMUwci8LzVK2a52cTLEHoinaKFEdFY rare
What you see above is a pathway (i.e. a link) to the parent folder
rare, and direct links to the child objects.
Step 5: Pin your File to IPFS
Next, we’re going to
pin the files we added to IPFS to our local storage. Presumably these files already exist on our machine, and by pinning the file, other nodes on the IPFS network know they can access the file from our machine. Below I pin the
$ ipfs pin add QmdNMBVqQJ9baQDAJMUwci8LzVK2a52cTLEHoinaKFEdFY
pinned QmdNMBVqQJ9baQDAJMUwci8LzVK2a52cTLEHoinaKFEdFY recursively
Step 6: Connect your IPFS Machine to the Network
In this next step, we will introduce your machine to the IPFS network. This allows other participants on the network to listen to your machine, to retrieve files from your machine, and for you to access files on others’ machines⁴.
Type the following to connect to the network:
$ ipfs daemon
Open another terminal (or Command Prompt), and take a look at who is connecting to your machine:
$ ipfs swarm peers
Protocol Labs, the company that maintains IPFS, has a number of bootstrapping nodes that are actively looking for new content placed on the network.
Further, Protocol Labs maintains a
HTTP -> IPFS gateway, and you can access any one of your files from their website, where they have mounted the IPFS system on their HTTP URL:
Check out my file above, fully loaded on IPFS: https://ipfs.io/ipfs/QmRuzPpc1tjJ5TbhG7B2Ato8LtaY2DK2Y5DMWWb29cqFF5
Step 7: Don’t Forget to Close the Daemon
Last but not least, make sure you disconnect from the network when you are done. Go back to the terminal where the daemon is running, and hit:
CTRL + C to stop the process.
 Note that my machine is a Windows 10, x64, operating system, and I use Cygwin to replicate a Unix-like environment on my machine. To Windows users — feel free to use cmd.exe — this also works.
 This is likely a new concept for those new to Git. Think of this like a virtual storage folder that can track both files on your machine and their version history.
 Note that the hash (i.e. the address) will be different in your terminal’s output than the example above. Use the one that your terminal spits out.
 Recall that accessing any network involves security risks, and that IPFS is in Alpha. Access the IPFS at your own risk on your own volition.