<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web3</title>
    <description>Dries Buytaert on Web3.</description>
    <link>https://dri.es/tag/web3</link>
    <atom:link href="https://dri.es/tag/web3/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>My Web3 site survived four years of neglect</title>
      <link>https://dri.es/my-web3-site-survived-four-years-of-neglect</link>
      <guid>https://dri.es/my-web3-site-survived-four-years-of-neglect</guid>
      <pubDate>Mon, 23 Feb 2026 03:56:44 -0500</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/web3-exploration-1280w.jpg&quot; alt=&quot;Two people on a platform observe a decentralized web of nodes.&quot; width=&quot;1280&quot; height=&quot;853&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Four years ago, &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;I published my first Web3 webpage&lt;/a&gt; using IPFS and ENS. I uploaded a simple &amp;quot;Hello World&amp;quot; HTML file, pointed &lt;code&gt;dries.eth&lt;/code&gt; at it, and left it there. &lt;a href=&quot;https://dri.es/two-years-later-is-my-web3-website-still-standing&quot;&gt;Two years later&lt;/a&gt;, I found it still running.&lt;/p&gt;
&lt;p&gt;I haven&#039;t touched it since. Today, on the experiment&#039;s four-year anniversary, I checked again. It&#039;s still up at &lt;a href=&quot;https://dries.eth.limo/&quot;&gt;dries.eth.limo&lt;/a&gt;. Four years of total neglect, and the page loads just fine.&lt;/p&gt;
&lt;p&gt;When I checked two years ago, every service I used was still operational. I called that &amp;quot;really encouraging&amp;quot;. That optimism aged poorly.&lt;/p&gt;
&lt;p&gt;Today, half the services have shut down, restricted access, or pivoted entirely:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fleek.co/&quot;&gt;Fleek&lt;/a&gt;, a platform I used to pin my content, &lt;a href=&quot;https://ipshipyard.com/blog/2026-ipfs-self-hosting-migration/&quot;&gt;shut down its hosting service&lt;/a&gt; on January 31, 2026. They pivoted to AI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://infura.io/&quot;&gt;Infura&lt;/a&gt; was acquired by &lt;a href=&quot;https://metamask.io/&quot;&gt;MetaMask&lt;/a&gt; and &lt;a href=&quot;https://docs.metamask.io/services/reference/ipfs/&quot;&gt;closed its IPFS service to new users&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://web3.storage&quot;&gt;Web3.storage&lt;/a&gt; rebranded to &lt;a href=&quot;https://storacha.network/&quot;&gt;Storacha&lt;/a&gt;, and dropped IPFS pinning altogether.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/cloudflares-public-ipfs-gateways-and-supporting-interplanetary-shipyard/&quot;&gt;Cloudflare sunset its public IPFS gateways&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://labs.scaleway.com/en/ipfs-pinning/&quot;&gt;Scaleway shut down its IPFS pinning service&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of the original services, &lt;a href=&quot;https://pinata.cloud/&quot;&gt;Pinata&lt;/a&gt; is still focused on IPFS. I logged in and my &amp;quot;Hello World&amp;quot; HTML file is still there. And &lt;a href=&quot;https://eth.limo/&quot;&gt;eth.limo&lt;/a&gt;, the ENS gateway that lets anyone access &lt;code&gt;.eth&lt;/code&gt; sites in a normal browser, still works.&lt;/p&gt;
&lt;h2&gt;Technically robust, commercially fragile&lt;/h2&gt;
&lt;p&gt;IPFS content exists only as long as someone chooses to host it. In 2022, my HTML file was pinned on Fleek, Pinata, Infura, and a friend&#039;s node. Today, it comes down to Pinata&#039;s free tier. My web3 page is hanging by a thread.&lt;/p&gt;
&lt;p&gt;That sounds fragile, and in one sense it is. But the protocol is working as designed. IPFS doesn&#039;t promise permanence. It promises that content is addressable, verifiable, and can be kept alive by anyone who cares enough to pin it.&lt;/p&gt;
&lt;p&gt;The durability of content on IPFS scales with how much people care about it. No one really cares about my &amp;quot;Hello World&amp;quot; page, so it&#039;s not being pinned. If this were dissident journalism or censored speech, people would likely pin it.&lt;/p&gt;
&lt;p&gt;If you run an IPFS node and want to help keep my page alive, feel free to pin it: &lt;code&gt;ipfs pin add bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Of course, I could make it more robust myself by pinning it on additional services or running my own node. Instead, I relied on third parties. With no node of my own, I&#039;m entirely dependent on pinning services and other users to keep it alive.&lt;/p&gt;
&lt;p&gt;The real story isn&#039;t fragility. It&#039;s economics. There may simply not be enough demand for decentralized storage to support a healthy market of providers. Companies keep entering, failing to find a business model, and pivoting away.&lt;/p&gt;
&lt;p&gt;Traditional hosting is cheap, reliable, and familiar. The people who need censorship resistance are a narrow group, and everyone else has little reason to switch, myself included. And to be fair, replacing everyday web hosting was probably never IPFS&#039;s goal.&lt;/p&gt;
&lt;p&gt;I still love IPFS as a protocol and the ideas behind it. But it feels like the ecosystem around it is commercially thin, and getting thinner.&lt;/p&gt;
&lt;p&gt;I&#039;ve written before about the idea of a &lt;a href=&quot;https://dri.es/a-raid-for-web-content&quot;&gt;RAID for web content&lt;/a&gt;. Rather than relying on a single system, the goal is redundancy across multiple layers. I&#039;d like to experiment more with IPFS and make it one of those layers.&lt;/p&gt;
&lt;h2&gt;Browser support got worse, not better&lt;/h2&gt;
&lt;p&gt;In 2022, mainstream browsers didn&#039;t support ENS or IPFS natively, except for &lt;a href=&quot;https://brave.com/&quot;&gt;Brave&lt;/a&gt;. Brave included a built-in IPFS node that could resolve &lt;code&gt;ipfs://&lt;/code&gt; and &lt;code&gt;ipns://&lt;/code&gt; addresses directly.&lt;/p&gt;
&lt;p&gt;In August 2024, Brave &lt;a href=&quot;https://brave.com/blog/ipfs-support/&quot;&gt;removed that integration&lt;/a&gt;. Fewer than 0.1% of users had ever used it, and the support costs were too high.&lt;/p&gt;
&lt;p&gt;Chrome, Firefox, and Safari still don&#039;t support ENS or IPFS natively. A &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1354807&quot;&gt;Firefox issue for adding IPFS support&lt;/a&gt; has been open since 2017, with no plans to implement it. The IPFS community continues pushing for &lt;a href=&quot;https://discuss.ipfs.tech/t/browsers-standards-work-2026-call-for-community-input/19917&quot;&gt;browser standards work&lt;/a&gt;, but native protocol support seems like a long way off.&lt;/p&gt;
&lt;p&gt;Today, the easiest way to visit a &lt;code&gt;.eth&lt;/code&gt; site is still through a gateway like &lt;a href=&quot;https://eth.limo/&quot;&gt;eth.limo&lt;/a&gt;. You append &lt;code&gt;.limo&lt;/code&gt; to the ENS name and visit it in any browser. It works, but it&#039;s a centralized bridge to a decentralized system, which is a little ironic.&lt;/p&gt;
&lt;h2&gt;Gas fees dropped 99%&lt;/h2&gt;
&lt;p&gt;Not everything got worse. In &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;my original post&lt;/a&gt;, I called out the cost of updating an ENS record as a major barrier. When content changes on IPFS, its hash changes too. To keep &lt;code&gt;dries.eth&lt;/code&gt; pointing to the latest version, that new address has to be written to Ethereum, which costs gas.&lt;/p&gt;
&lt;p&gt;Updating my content on Ethereum cost me $11.69 in 2022 and $4.08 in 2024. If I wanted to update it today, it would cost roughly one cent.&lt;/p&gt;
&lt;p&gt;Average Ethereum gas prices now sit around 0.03 to 0.05 Gwei, compared to 30 to 50 Gwei when I first set this up. That is roughly a thousand times cheaper.&lt;/p&gt;
&lt;p&gt;Two things drove this.&lt;/p&gt;
&lt;p&gt;First, Ethereum roughly doubled the computation it can process per block over 2025. Validators gradually raised the gas limit, and the &lt;a href=&quot;https://ethereum.org/roadmap/fusaka/&quot;&gt;Fusaka upgrade&lt;/a&gt; in December formally pushed it from 30 million to 60 million.&lt;/p&gt;
&lt;p&gt;Second, many applications migrated to Layer 2 networks. These are separate blockchains that batch up transactions and settle them back to Ethereum in bulk. As traffic moved off the main chain, congestion and fees dropped further.&lt;/p&gt;
&lt;p&gt;The impact on ENS is dramatic. Just this month, ENS Labs &lt;a href=&quot;https://www.theblock.co/post/388932/ens-labs-scraps-namechain-l2-shifts-ensv2-fully-ethereum-mainnet&quot;&gt;cancelled its planned Layer 2 blockchain called &amp;quot;Namechain&amp;quot;&lt;/a&gt; because Ethereum&#039;s main network got so inexpensive that the Layer 2 became unnecessary. Nick Johnson, ENS co-founder and lead developer, noted that subsidizing 100% of all ENS transactions at current gas prices would cost about $10,000 per year.&lt;/p&gt;
&lt;h2&gt;A mixed scorecard&lt;/h2&gt;
&lt;p&gt;Four years in, the technology is better than ever but the market around it is worse. The IPFS protocol seems sound. ENS records are permanent. Gas fees have nearly vanished. But the commercial ecosystem for decentralized hosting has steadily thinned.&lt;/p&gt;
&lt;p&gt;I wrote in 2022 that &amp;quot;IPFS and ENS offer limited value to most website owners, but tremendous value to a very narrow subset&amp;quot;. Four years later, that assessment holds true.&lt;/p&gt;
&lt;p&gt;AI also absorbed most of the tech industry&#039;s attention and capital. Web3 funding dropped sharply. Fleek&#039;s pivot from IPFS hosting to AI inference feels symbolic.&lt;/p&gt;
&lt;p&gt;Will I keep the experiment going? Of course. But it&#039;s probably time to add a few more pins and stop relying on free tiers. The protocols don&#039;t need my help. The ecosystem apparently does.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>Two years later: is my Web3 website still standing?</title>
      <link>https://dri.es/two-years-later-is-my-web3-website-still-standing</link>
      <guid>https://dri.es/two-years-later-is-my-web3-website-still-standing</guid>
      <pubDate>Thu, 29 Feb 2024 10:06:36 -0500</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/web3-exploration-1280w.jpg&quot; alt=&quot;Two people on a platform observe a decentralized web of nodes.&quot; width=&quot;1280&quot; height=&quot;853&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Two years ago, &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;I launched a simple Web3 website&lt;/a&gt; using &lt;a href=&quot;https://ipfs.io/&quot;&gt;IPFS&lt;/a&gt; (InterPlanetary File System) and &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS&lt;/a&gt; (Ethereum Name Service). Back then, Web3 tools were getting a lot of media attention and I wanted to try it out.&lt;/p&gt;
&lt;p&gt;Since I set up my Web3 website two years ago, I basically forgot about it. I didn&#039;t update it or pay attention to it for two years. But now that we hit the two-year mark, I&#039;m curious: is my Web3 website still online?&lt;/p&gt;
&lt;p&gt;At that time, I also stated that Web3 was not fit for hosting modern web applications, except for a small niche: static sites requiring high resilience and infrequent content updates.&lt;/p&gt;
&lt;p&gt;I was also curious to explore the evolution of Web3 technologies to see if they became more applicable for website hosting.&lt;/p&gt;
&lt;h3&gt;My original Web3 experiment&lt;/h3&gt;
&lt;p&gt;In my original blog post, I documented the process of setting up what could be called the &amp;quot;Hello World&amp;quot; of Web3 hosting. I stored an HTML file on IPFS, ensured its availability using &amp;quot;pinning services&amp;quot;, and made it accessible using an ENS domain.&lt;/p&gt;
&lt;p&gt;For those with a basic understanding of Web3, here is a summary of the steps I took to launch my first Web3 website two years ago:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Purchased an ENS domain name:&lt;/strong&gt; I used a crypto wallet with Ethereum to acquire &lt;code&gt;dries.eth&lt;/code&gt; through the &lt;a href=&quot;https://ens.domains/&quot;&gt;Ethereum Name Service&lt;/a&gt;, a decentralized alternative to the traditional DNS (Domain Name System).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uploaded an HTML File to IPFS:&lt;/strong&gt; I uploaded a static HTML page to the &lt;a href=&quot;https://ipfs.io/&quot;&gt;InterPlanetary File System&lt;/a&gt; (IPFS), which involved running my own IPFS node and utilizing various pinning services like &lt;a href=&quot;https://infura.io/&quot;&gt;Infura&lt;/a&gt;, &lt;a href=&quot;https://fleek.co/&quot;&gt;Fleek&lt;/a&gt;, and &lt;a href=&quot;https://pinata.cloud/&quot;&gt;Pinata&lt;/a&gt;. These pinning services ensure that the content remains available online even when my own IPFS node is offline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessed the website:&lt;/strong&gt; I confirmed that my website was accessible through IPFS-compatible browsers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mapped my webpage to my domain name:&lt;/strong&gt; As the last step, I linked my IPFS-hosted site to my ENS domain &lt;code&gt;dries.eth&lt;/code&gt;, making the web page accessible under an easy domain name.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If the four steps above are confusing to you, I recommend reading &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;my original post&lt;/a&gt;. It is over 2,000 words, complete with screenshots and detailed explanations of the steps above.&lt;/p&gt;
&lt;h3&gt;Checking the pulse of various Web3 services&lt;/h3&gt;
&lt;p&gt;As the first step in my check-up, I wanted to verify if the various services I referenced in my original blog post are still operational.&lt;/p&gt;
&lt;p&gt;The results, displayed in the table below, are really encouraging: Ethereum, ENS, IPFS, Filecoin, Infura, Fleek, Pinata, and web3.storage are all operational.&lt;/p&gt;
&lt;p&gt;The two main technologies – ENS and IPFS – are both actively maintained and developed. This indicates that Web3 technology has built a robust foundation.&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
  &lt;th&gt;Service&lt;/th&gt;
  &lt;th&gt;Description&lt;/th&gt;
  &lt;th&gt;Still around in February 2024)&lt;/th&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;A blockchain-based naming protocol offering DNS for Web3, mapping domain names to Ethereum addresses.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://ipfs.io/&quot;&gt;IPFS&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;A peer-to-peer protocol for storing and sharing data in a distributed file system.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://filecoin.io/&quot;&gt;Filecoin&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;A blockchain-based storage network and cryptocurrency that incentivizes data storage and replication.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://infura.io/&quot;&gt;Infura&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;Provides tools and infrastructure to manage content on IPFS and other tools for developers to connect their applications to blockchain networks and deploy smart contracts.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://fleek.co/&quot;&gt;Fleek&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;A platform for building websites using IPFS and ENS.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://pinata.cloud/&quot;&gt;Pinata&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;Provides tools and infrastructure to manage content on IPFS, and more recently &lt;a href=&quot;https://www.farcaster.xyz/&quot;&gt;Farcaster&lt;/a&gt; applications.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
  &lt;tr&gt;
  &lt;td&gt;
  &lt;a href=&quot;https://web3.storage/&quot;&gt;web3.storage&lt;/a&gt;
&lt;/td&gt;
  &lt;td&gt;Provides tools and infrastructure to manage content on IPFS with support for Filecoin.&lt;/td&gt;
  &lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Is my Web3 website still up?&lt;/h3&gt;
&lt;p&gt;Seeing all these Web3 services operational is encouraging, but the ultimate test is to check if my Web3 webpage, &lt;code&gt;dries.eth&lt;/code&gt;, remained live. It&#039;s one thing for these services to work, but another for my site to function properly. Here is what I found in a detailed examination:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Domain ownership verification:&lt;/strong&gt; A quick check on &lt;a href=&quot;https://etherscan.io/name-lookup-search?id=dries.eth&quot;&gt;etherscan.io&lt;/a&gt; confirmed that &lt;code&gt;dries.eth&lt;/code&gt; is still registered to me. Relief!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ENS registrar access:&lt;/strong&gt; Using my crypto wallet, I could easily log into the ENS registrar and manage my domains. I even successfully renewed &lt;code&gt;dries.eth&lt;/code&gt; as a test.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPFS content availability:&lt;/strong&gt; My webpage is still available on IPFS, thanks to having pinned it two years ago. Logging into &lt;a href=&quot;https://fleek.co/&quot;&gt;Fleek&lt;/a&gt; and &lt;a href=&quot;https://pinata.cloud/&quot;&gt;Pinata&lt;/a&gt;, I found my content on their admin dashboards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web3 and ENS gateway access:&lt;/strong&gt; I can visit &lt;code&gt;dries.eth&lt;/code&gt; using a Web3 browser, and also via an IPFS-compatible ENS gateway like &lt;a href=&quot;https://dries.eth.limo/&quot;&gt;https://dries.eth.limo/&lt;/a&gt; – a privacy-centric service, new since my initial blog post.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The verdict? Not only are these Web3 services still operational, but my webpage also continues to work!&lt;/p&gt;
&lt;p&gt;This is particularly noteworthy given that I haven&#039;t logged in to these services, didn&#039;t perform any maintenance, or didn&#039;t pay any hosting fees for two years (the pinning services I&#039;m using have a free tier).&lt;/p&gt;
&lt;h3&gt;Visit my Web3 page yourself&lt;/h3&gt;
&lt;p&gt;For anyone interested in visiting my Web3 page (perhaps your first Web3 visit?), there are several methods to choose from, each with a different level of Web3-ness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use a Web3-enabled browser:&lt;/strong&gt; Browsers such as &lt;a href=&quot;https://brave.com/&quot;&gt;Brave&lt;/a&gt; and &lt;a href=&quot;https://www.opera.com/&quot;&gt;Opera&lt;/a&gt;, offer built-in ENS and IPFS support. They can resolve ENS addresses and interpret IPFS addresses, making it as easy to navigate IPFS content as if it is traditional web content via HTTP or HTTPS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Install a Web3 browser extension:&lt;/strong&gt; If your favorite browser does not support Web3 out of the box, adding a browser extension like &lt;a href=&quot;https://metamask.io/&quot;&gt;MetaMask&lt;/a&gt; can help you access Web3 applications. MetaMask works with Chrome, Firefox, and Edge. It enables you to use &lt;code&gt;.eth&lt;/code&gt; domains for doing Ethereum transactions or for accessing content on IPFS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access through an ENS gateway:&lt;/strong&gt; For those looking for the simplest way to access Web3 content without installing anything new, using an ENS gateway, such as &lt;a href=&quot;https://eth.limo/&quot;&gt;eth.limo&lt;/a&gt;, is the easiest method. This gateway maps ENS domains to DNS, offering direct navigation to Web3 sites like mine at &lt;a href=&quot;https://dries.eth.limo/&quot;&gt;https://dries.eth.limo/&lt;/a&gt;. It serves as a simple bridge between Web2 (the conventional web) and Web3.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Streamlining content updates with IPNS&lt;/h3&gt;
&lt;p&gt;In &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;my original post&lt;/a&gt;, I highlighted various challenges, such as the limitations for hosting dynamic applications, the cost of updates, and the slow speed of these updates. Although these issues still exist, my initial analysis was conducted with an incomplete understanding of the available technology. I want to delve deeper into these limitations, and refine my previous statements.&lt;/p&gt;
&lt;p&gt;Some of these challenges stem from the fact that IPFS operates as a &amp;quot;content-addressed network&amp;quot;. Unlike traditional systems that use URLs or file paths to locate content, IPFS uses a unique hash of the content itself. This hash is used to locate and verify the content, but also to facilitate decentralized storage.&lt;/p&gt;
&lt;p&gt;While the principle of addressing content by a hash is super interesting, it also introduces some complications: whenever content is updated, its hash changes, making it tricky to link to the updated content. Specifically, every time I updated my Web3 site&#039;s content, I had to update my ENS record, and pay a translation fee on the Ethereum network.&lt;/p&gt;
&lt;p&gt;At the time, I wasn&#039;t familiar with the &lt;a href=&quot;https://docs.ipfs.tech/concepts/ipns/&quot;&gt;InterPlanetary Name System&lt;/a&gt; (IPNS). IPNS, not to be confused with IPFS, addresses this challenge by assigning a mutable name to content on IPFS. You can think of IPNS as providing an &amp;quot;alias&amp;quot; or &amp;quot;redirect&amp;quot; for IPFS addresses: the IPNS address always stays the same and points to the latest IPFS address. It effectively eliminates the necessity of updating ENS records with each content change, cutting down on expenses and making the update process more automated and efficient.&lt;/p&gt;
&lt;p&gt;To leverage IPNS, you have to take the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Upload your HTML file to IPFS and receive an IPFS hash.&lt;/li&gt;
&lt;li&gt;Publish this hash to IPNS, creating an IPNS hash that directs to the latest IPFS hash.&lt;/li&gt;
&lt;li&gt;Link your ENS domain to this IPNS hash. Since the IPNS hash remains constant, you only need to update your ENS record once.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Without IPNS, updating content involved:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update the HTML file.&lt;/li&gt;
&lt;li&gt;Upload the revised file to IPFS, generating a new IPFS hash.&lt;/li&gt;
&lt;li&gt;Update the ENS record with the new IPFS hash, which costs some Ether and can take a few minutes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With IPNS, updating content involves:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update the HTML file.&lt;/li&gt;
&lt;li&gt;Upload the revised file to IPFS, generating a new IPFS hash.&lt;/li&gt;
&lt;li&gt;Update the IPNS record to reference this new hash, which is free and almost instant.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Although IPNS is a faster and more cost-effective approach compared to the original method, it still carries a level of complexity. There is also a minor runtime delay due to the extra redirection step. However, I believe this tradeoff is worth it.&lt;/p&gt;
&lt;h3&gt;Updating my Web3 site to use IPNS&lt;/h3&gt;
&lt;p&gt;With this newfound knowledge, I decided to use IPNS for my own site. I generated an IPNS hash using both the IPFS desktop application (see screenshot) and IPFS&#039; command line tools:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ ipfs name publish /ipfs/bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q
&amp;gt; Published to k51qzi5uqu5dgy8mzjtcqvgr388xjc58fwprededbb1fisq1kvl34sy4h2qu1a: /ipfs/bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/publish-to-ipns-from-ipfs-desktop.png&quot; alt=&quot;A screenshot of the IPFS Desktop application displaying an HTML file with a drop-down menu option to &amp;amp;#039;Publish to IPNS&amp;amp;#039;.&quot; width=&quot;2210&quot; height=&quot;1604&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;The IPFS Desktop application showing my &lt;code&gt;index.html&lt;/code&gt; file with an option to &#039;Publish to IPNS&#039;.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;After generating the IPNS hash, I was able to visit my site in Brave using the IPFS protocol at &lt;code&gt;ipfs://bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q&lt;/code&gt;, or via the IPNS protocol at &lt;code&gt;ipns://k51qzi5uqu5dgy8mzjtcqvgr388xjc58fwprededbb1fisq1kvl34sy4h2qu1a&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/brave-ipns.png&quot; alt=&quot;A browser window displaying a simple &amp;amp;quot;Hello world!&amp;amp;quot; webpage on IPNS.&quot; width=&quot;1588&quot; height=&quot;1050&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;My Web3 site in Brave using IPNS.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Next, I updated the ENS record for &lt;code&gt;dries.eth&lt;/code&gt; to link to my IPNS hash. This change cost me 0.0011 ETH (currently $4.08 USD), as shown in the &lt;a href=&quot;https://etherscan.io/tx/0xfc8be3add432e7440478897726eced850087cb8a1f79dcdeb926e575c31e3f8c&quot;&gt;Etherscan transaction&lt;/a&gt;. Once the transaction was processed, &lt;code&gt;dries.eth&lt;/code&gt; began directing to the new IPNS address.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/ipns-record-on-ethereum-name-service.png&quot; alt=&quot;A screen confirming an updated content hash for &amp;amp;#039;dries.eth&amp;amp;#039; on the Ethereum Name Service, with a link to view the transaction on Etherscan.&quot; width=&quot;2048&quot; height=&quot;1536&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;A transaction confirmation on the &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS website&lt;/a&gt;, showing a successful update for &lt;code&gt;dries.eth&lt;/code&gt;.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;Rolling back my IPNS record in ENS&lt;/h3&gt;
&lt;p&gt;Unfortunately, my excitement was short-lived. A day later, &lt;code&gt;dries.eth&lt;/code&gt; stopped working. IPNS records, it turns out, need to be kept alive – a lesson learned the hard way.&lt;/p&gt;
&lt;p&gt;While IPFS content can be persisted through &amp;quot;pinning&amp;quot;, IPNS records require periodic &amp;quot;republishing&amp;quot; to remain active. Essentially, the network&#039;s Distributed Hash Table (DHT) may drop IPNS records after a certain amount of time, typically 24 hours. To prevent an IPNS record from being dropped, the owner must &amp;quot;republish&amp;quot; it before the DHT forgets it.&lt;/p&gt;
&lt;p&gt;I found out that the pinning services I use – &lt;a href=&quot;https://dolphin.io&quot;&gt;Dolphin&lt;/a&gt;, &lt;a href=&quot;https://fleek.co&quot;&gt;Fleek&lt;/a&gt; and &lt;a href=&quot;https://pinata.cloud&quot;&gt;Pinata&lt;/a&gt; – don&#039;t support IPNS republishing. Looking into it further, it turns out few IPFS providers do.&lt;/p&gt;
&lt;p&gt;During my research, I discovered &lt;a href=&quot;https://filebase.com&quot;&gt;Filebase&lt;/a&gt;, a small Boston-based company with fewer than five employees that I hadn&#039;t come across before. Interestingly, they provide both IPFS pinning and IPNS republishing. However, to pin my existing HTML file and republish its IPNS hash, I had to subscribe to their service at a cost of $20 per month.&lt;/p&gt;
&lt;p&gt;Faced with the challenge of keeping my IPNS hash active, I found myself at a crossroads: either fork out $20 a month for a service like Filebase that handles IPNS republishing for me, or take on the responsibility of running my own IPFS node.&lt;/p&gt;
&lt;p&gt;Of course, the whole point of decentralized storage is that people run their own nodes. However, considering the scope of my project – a single HTML file – the effort of running a dedicated node seemed disproportionate. I&#039;m also running my IPFS node on my personal laptop, which is not always online. Maybe one day I&#039;ll try setting up a dedicated IPFS node on a Raspberry Pi or similar setup.&lt;/p&gt;
&lt;p&gt;Ultimately, I decided to switch my ENS record back to the original IPFS link. This change, documented in the &lt;a href=&quot;https://etherscan.io/tx/0xb2d68b8244daa4412c8a04d13c66c8705cdeb2233c8f219486c14225ac90440a&quot;&gt;Etherscan transaction&lt;/a&gt;, cost me 0.002 ETH (currently $6.88 USD).&lt;/p&gt;
&lt;p&gt;Although IPNS works, or can work, it just didn&#039;t work for me. Despite the setback, the whole experience was a great learning journey.&lt;/p&gt;
&lt;h3&gt;Web3 remains too complex for most people&lt;/h3&gt;
&lt;p&gt;Over the past two years, Web3 hosting hasn&#039;t disrupted the mainstream website hosting market. Despite the allure of Web3, mainstream website hosting is simple, reliable, and meets the needs of nearly all users.&lt;/p&gt;
&lt;p&gt;Despite a significant upgrade of the Ethereum network that &lt;a href=&quot;https://ethereum.org/en/energy-consumption/&quot;&gt;reduced energy consumption by over 99%&lt;/a&gt; through its transition to a Proof of Stake (PoS) consensus mechanism, environmental considerations, especially the carbon footprint associated with blockchain technologies, continue to create further challenges for the widespread adoption of Web3 technologies. (Note: ENS operates on the blockchain but IPFS does not.)&lt;/p&gt;
&lt;p&gt;As I went through the check-up, I discovered islands of innovation and progress. Wallets and ENS domains got easier to use. However, the overall process of creating a basic website with IPFS and ENS remains relatively complex compared to the simplicity of Web2 hosting.&lt;/p&gt;
&lt;h3&gt;The need for a SQL-compatible Web3 database&lt;/h3&gt;
&lt;p&gt;Modern web applications like those built with &lt;a href=&quot;https://www.drupal.org/&quot;&gt;Drupal&lt;/a&gt; and &lt;a href=&quot;https://wordpress.org/&quot;&gt;WordPress&lt;/a&gt; rely on a technology stack that includes a file system, a domain name system (e.g. DNS), a database (e.g. MariaDB or MySQL), and a server-side runtime environment (e.g. PHP).&lt;/p&gt;
&lt;p&gt;While IPFS and ENS offer decentralized alternatives for the first two, the equivalents for databases and runtime environments are less mature. This limits the types of applications that can easily move from Web2 to Web3.&lt;/p&gt;
&lt;p&gt;A major breakthrough would be the development of a decentralized database that is compatible with SQL, but currently, this does not seem to exist. The complexity of ensuring data integrity and confidentiality across multiple nodes without a central authority, along with meeting the throughput demands of modern web applications, may be too complex to solve.&lt;/p&gt;
&lt;p&gt;After all, blockchains, as decentralized databases, have been in development for over a decade, yet lack support for the SQL language and fall short in speed and efficiency required for dynamic websites.&lt;/p&gt;
&lt;h3&gt;The need for a distributed runtime&lt;/h3&gt;
&lt;p&gt;Another critical component for modern websites is the runtime environment, which executes the server-side logic of web applications. Traditionally, this has been the domain of PHP, Python, Node.js, Java, etc.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/WebAssembly&quot;&gt;WebAssembly&lt;/a&gt; (WASM) could emerge as a potential solution. It could make for an interesting decentralized solution as WASM binaries can be hosted on IPFS.&lt;/p&gt;
&lt;p&gt;However, when WASM runs on the client-side – i.e. in the browser – it can&#039;t deliver the full capabilities of a server-side environment. This limitation makes it challenging to fully replicate traditional web applications.&lt;/p&gt;
&lt;p&gt;So for now, Web3&#039;s applications are quite limited. While it&#039;s possible to host static websites on IPFS, dynamic applications requiring database interactions and server-side processing are difficult to transition to Web3.&lt;/p&gt;
&lt;h3&gt;Bridging the gap between Web2 and Web3&lt;/h3&gt;
&lt;p&gt;In the short term, the most likely path forward is blending decentralized and traditional technologies. For example, a website could store its static files on IPFS while relying on traditional Web2 solutions for its dynamic features.&lt;/p&gt;
&lt;p&gt;Looking to the future, initiatives like &lt;a href=&quot;https://orbitdb.org/&quot;&gt;OrbitDB&#039;s peer-to-peer database&lt;/a&gt;, which integrates with IPFS, show promise. However, OrbitDB lacks compatibility with SQL, meaning applications would need to be redesigned rather than simply transferred.&lt;/p&gt;
&lt;h3&gt;Web3 site hosting remains niche&lt;/h3&gt;
&lt;p&gt;Even the task of hosting static websites, which don&#039;t need a database or server-side processing, is relatively niche within the Web3 ecosystem.&lt;/p&gt;
&lt;p&gt;As I wrote in &lt;a href=&quot;https://dri.es/my-first-web3-webpage&quot;&gt;my original post&lt;/a&gt;: &lt;q&gt;In its current state, IPFS and ENS offer limited value to most website owners, but tremendous value to a very narrow subset of all website owners.&lt;/q&gt;. This observation remains accurate today.&lt;/p&gt;
&lt;p&gt;IPFS and ENS stand out for their strengths in censorship resistance and reliability. However, for the majority of users, the convenience and adequacy of Web2 for hosting static sites often outweigh these benefits.&lt;/p&gt;
&lt;p&gt;The key to broader acceptance of new technologies, like Web3, hinges on either discovering new mass-market use cases or significantly enhancing the user experience for existing ones. Web3 has not found a universal application or surpassed Web2 in user experience.&lt;/p&gt;
&lt;p&gt;The popularity of SaaS platforms underscores this point. They dominate not because they&#039;re the most resilient or robust options, but because they&#039;re the most convenient. Despite the benefits of resilience and autonomy offered by Web3, most individuals opt for less resilient but more convenient SaaS solutions.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Despite the billions invested in Web3 and notable progress, its use for website hosting still has significant limitations.&lt;/p&gt;
&lt;p&gt;The main challenge for the Web3 community is to either develop new, broadly appealing applications or significantly improve the usability of existing technologies.&lt;/p&gt;
&lt;p&gt;Website hosting falls into the category of existing use cases.&lt;/p&gt;
&lt;p&gt;Unfortunately, Web3 remains mostly limited to static websites, as it does not yet offer robust alternatives to SQL databases and server-side runtime.&lt;/p&gt;
&lt;p&gt;Even within the limited scope of static websites, improvements to the user experience have been marginal, focused on individual parts of the technology stack. The overall end-to-end experience remains complex.&lt;/p&gt;
&lt;p&gt;Nonetheless, the fact that my Web3 page is still up and running after two years is encouraging, showing the robustness of the underlying technology, even if its current use remains limited. I&#039;ve grown quite fond of IPFS, and I hope to do more useful experiments with it in the future.&lt;/p&gt;
&lt;p&gt;All things considered, I don&#039;t see Web3 taking the website hosting world by storm any time soon. That said, over time, Web3 could become significantly more attractive and functional. All in all, keeping an eye on this space is definitely fun and worthwhile.&lt;/p&gt;
</description>
    </item>
    <item>
      <title>My first Web3 webpage</title>
      <link>https://dri.es/my-first-web3-webpage</link>
      <guid>https://dri.es/my-first-web3-webpage</guid>
      <pubDate>Thu, 24 Feb 2022 04:19:24 -0500</pubDate>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/cache/blog/web3-exploration-1280w.jpg&quot; alt=&quot;Two people on a platform observe a decentralized web of nodes.&quot; width=&quot;1280&quot; height=&quot;853&quot; /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Today, I&#039;m going to publish my first webpage using Web3 technologies. I will upload a page to IPFS (InterPlanetary File System), make it available at &lt;code&gt;dries.eth&lt;/code&gt; using ENS (Ethereum Name Service), and visit it with a Web3-enabled browser. If you don&#039;t know what that means, buckle up for a crash course.&lt;/p&gt;
&lt;h3&gt;Step 1: Buy an ENS domain name&lt;/h3&gt;
&lt;p&gt;Last year, &lt;a href=&quot;https://etherscan.io/tx/0x86dc98df818e3e135be63bfda35b5e5e3a8a467435c54f9d6707f6c0be2064ad&quot;&gt;I minted &lt;code&gt;buytaert.eth&lt;/code&gt;&lt;/a&gt;, and more recently, &lt;a href=&quot;https://etherscan.io/tx/0xf60512dae73bd0e37b622ef60bb1bded61dbe72dbe96c1e89e7f7b2d99b14d63&quot;&gt;I purchased &lt;code&gt;dries.eth&lt;/code&gt;&lt;/a&gt;. Both are &lt;em&gt;ENS domain names&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ens.domains/&quot;&gt;ENS&lt;/a&gt;, which stands for &lt;em&gt;Ethereum Name Service&lt;/em&gt;, is an Open Source blockchain-based naming protocol. You can think of ENS as DNS for Web3. Where DNS maps domain names to IP addresses, ENS maps domain names to Ethereum addresses. And an Ethereum address can point to a cryptocurrency wallet, a content hash, and more.&lt;/p&gt;
&lt;p&gt;ENS isn&#039;t just a service for Ethereum; it&#039;s a general purpose Web3 service built &lt;em&gt;on&lt;/em&gt; Ethereum using &lt;a href=&quot;https://ethereum.org/en/smart-contracts/&quot;&gt;smart contracts&lt;/a&gt;. Because ENS is built on the blockchain, it is more resistant to censorship than DNS.&lt;/p&gt;
&lt;p&gt;Today, the primary use case for having your own ENS domain is to make receiving cryptocurrencies easier. If you wanted to send me some Ether, you have to send it to &lt;code&gt;0xbAD65DE65AE2c23f5eA30d12fC8c2f883cbe671f&lt;/code&gt;, the address of my Ethereum wallet. Because I own &lt;code&gt;dries.eth&lt;/code&gt;, you can send it &lt;code&gt;dries.eth&lt;/code&gt; instead. Much easier to remember!&lt;/p&gt;
&lt;p&gt;It&#039;s pretty amazing that &lt;code&gt;dries.eth&lt;/code&gt; can collect cryptocurrencies permissionless from anyone anywhere in the world without a single intermediary. However, that is not the topic of today&#039;s blog post. In this blog post, I want to show how &lt;code&gt;dries.eth&lt;/code&gt; can be used to host a fully decentralized Web3 webpage.&lt;/p&gt;
&lt;p&gt;If you want to buy an &lt;code&gt;.eth&lt;/code&gt; domain, you can do so at the &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS Domains website&lt;/a&gt;. Because an &lt;code&gt;.eth&lt;/code&gt; domain is an NFT (Non-Fungible Token), you can also buy and sell domain names at NFT marketplaces like &lt;a href=&quot;http://opensea.io/&quot;&gt;OpenSea&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When ENS launched in May 2017, it only supported the ENS-native TLD &lt;code&gt;.eth&lt;/code&gt;. As of August 2021, ENS added support for the full DNS namespace. So if you own &lt;code&gt;example.com&lt;/code&gt; on DNS, you can use the &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS Domains website&lt;/a&gt; to set ENS records for &lt;code&gt;example.com&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Step 2: Upload a HTML file to IPFS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://ipfs.io/&quot;&gt;IPFS&lt;/a&gt;, short for &lt;em&gt;InterPlanetary File System&lt;/em&gt;, is an Open Source protocol and peer-to-peer network for storing and sharing data.&lt;/p&gt;
&lt;p&gt;Today, most webpages are stored on a single server, hosted in a single data center. These sites are not very resilient to a single point of failure, denial of service attacks, or government censorship.&lt;/p&gt;
&lt;p&gt;More advanced websites replicate their webpages using &lt;a href=&quot;https://en.wikipedia.org/wiki/Content_delivery_network&quot;&gt;CDNs&lt;/a&gt; and other caching systems. My site uses multiple Kubernetes web nodes, Varnish and Cloudflare, but that is because &lt;a href=&quot;https://dri.es/acquia-my-drupal-startup&quot;&gt;my company&lt;/a&gt; helps run some of the largest websites in the world, not because my website requires it. All these technologies can be used to improve a website&#039;s resiliency.&lt;/p&gt;
&lt;p&gt;With IPFS, your webpage can be replicated across hundreds of &amp;quot;IPFS nodes&amp;quot; around the world. Everyone in the world can run an IPFS node. The nodes create a single, global network, and each file in the network gets a unique, global identifier.&lt;/p&gt;
&lt;p&gt;In theory, IPFS is &lt;em&gt;more resilient&lt;/em&gt; than traditional website hosting. Because IPFS nodes are run by different people and organizations around the world, and content is replicated across them, the hosted content is more resistant to a single point of failure, denial of service attacks, or government censorship. The flip-side is that it is also more difficult to moderate misinformation.&lt;/p&gt;
&lt;p&gt;I wrote &amp;quot;in theory&amp;quot; because content uploaded to IPFS only stays available as long as one node, somewhere in the world, chooses to host it. And by default, IPFS does &lt;em&gt;not&lt;/em&gt; include a built-in mechanism to incentivize other nodes in the network to replicate data. Each IPFS node tends to host its own data. Other nodes can replicate data cooperatively, or as a service.&lt;/p&gt;
&lt;p&gt;This is where &lt;a href=&quot;https://filecoin.io/&quot;&gt;Filecoin&lt;/a&gt; comes in. Like IPFS, Filecoin is an Open Source protocol. IPFS itself is not blockchain-based, but Filecoin is. Filecoin extends IPFS with a public marketplace for storing and replicating data. Miners can earn &lt;a href=&quot;https://www.coinbase.com/price/filecoin&quot;&gt;Filecoin&lt;/a&gt; (a cryptocurrency token) in exchange for storing and replicating IPFS data. Because Filecoin is blockchain-based, the marketplace is not owned by a single intermediary. Storage deals are brokered programmatically by nodes on the network.&lt;/p&gt;
&lt;p&gt;Long story short, to host my webpage on IPFS, I need at least one IPFS node willing to host my content. There are two solutions for this: (1) I can run my own IPFS node or (2) I can pay a third-party IPFS service to host my content.&lt;/p&gt;
&lt;h4&gt;Running my own IPFS node&lt;/h4&gt;
&lt;p&gt;In the spirit of helping to build a decentralized web, running your own IPFS node should be the preferred option. Below you can see my local IPFS node hosting my &lt;code&gt;index.html&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;large&quot;&gt;
  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/local-ipfs-node-1.png&quot; alt=&quot;The files overview screen of my local IPFS node&quot; width=&quot;3022&quot; height=&quot;1888&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;A &quot;Files&quot; overview screen showing that my local IPFS node is hosting &lt;code&gt;index.html&lt;/code&gt;.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/local-ipfs-node-2.png&quot; alt=&quot;The status screen of my local IPFS node showing bandwidth usage&quot; width=&quot;3024&quot; height=&quot;1888&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;A dashboard showing my local IPFS node&#039;s bandwidth usage.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;
&lt;h4&gt;Replicating my webpage&lt;/h4&gt;
&lt;p&gt;Because my local IPFS node runs on my laptop, my webpage is only available when my laptop is connected to the internet.&lt;/p&gt;
&lt;p&gt;As explained, I can use Filecoin to pay other nodes on the network to replicate my content. However, I came up with a better solution: &lt;a href=&quot;https://www.linkedin.com/in/sponnet/&quot;&gt;one of my best friends&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I asked him to &amp;quot;pin&amp;quot; my file on some of his IPFS nodes that are permanently connected to the internet. This way my webpage remains available even when my laptop disconnects from the internet.&lt;/p&gt;
&lt;div class=&quot;large&quot;&gt;
  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/local-ipfs-node-3.png&quot; alt=&quot;A drop-down menu allowing you to pin a file on IPFS.&quot; width=&quot;3020&quot; height=&quot;1884&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;A drop-down menu allows you to easily pin a file to an IPFS node.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;
&lt;p class=&quot;pullquote&quot;&gt;With a few friends pinning each other&#039;s websites on IPFS, you don&#039;t need to pay for web hosting anymore!&lt;/p&gt;
&lt;h4&gt;Third-party IPFS and pinning services&lt;/h4&gt;
&lt;p&gt;If you don&#039;t want to run your own IPFS service, or you don&#039;t have friends who can replicate your data, you can use a third-party IPFS and pinning service.&lt;/p&gt;
&lt;p&gt;I found a dozen pinning services, and tried the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://infura.io/&quot;&gt;Infura&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fleek.co/&quot;&gt;Fleek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.pinata.cloud/&quot;&gt;Pinata&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://infura.io/&quot;&gt;Infura&lt;/a&gt; makes it easy to upload files using their command line tool:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;$ ipfs-upload-client --id xxx --secret yyy ./index.html
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;xxx&lt;/code&gt; is the Infura Project ID and &lt;code&gt;yyy&lt;/code&gt; the Infura Project Secret Key.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;%E2%80%8B%E2%80%8Bhttps://fleek.co/&quot;&gt;Fleek&lt;/a&gt; and &lt;a href=&quot;https://www.pinata.cloud/&quot;&gt;Pinata&lt;/a&gt; allow you to upload files from your web browser:&lt;/p&gt;
&lt;div class=&quot;large&quot;&gt;
  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/fleek-upload-form.png&quot; alt=&quot;The file upload form in Fleek&quot; width=&quot;1280&quot; height=&quot;960&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;Fleek conveniently allows you to upload files to IPFS from the browser.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/pinata-replication.png&quot; alt=&quot;Pinata replication form&quot; width=&quot;1279&quot; height=&quot;960&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;Pinata allows you to upload files to IPFS from the browser. You can replicate content across multiple IPFS nodes run by Pinata.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;
&lt;p&gt;If you&#039;re looking for Filecoin-based solutions, &lt;a href=&quot;https://Web3.storage/&quot;&gt;Web3.storage&lt;/a&gt; comes recommended.&lt;/p&gt;
&lt;h3&gt;Step 3: Visit your Web3 webpage&lt;/h3&gt;
&lt;p&gt;After uploading a file to IPFS, you get the &amp;quot;hash&amp;quot; (a unique ID or address) of the file. The hash of my &lt;code&gt;index.html&lt;/code&gt; file is:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Content hosted on IPFS can be accessed using an IPFS-compatible browser like &lt;a href=&quot;https://brave.com/&quot;&gt;Brave&lt;/a&gt;. Firefox, Safari and Chrome don&#039;t currently support IPFS natively, but various IPFS browser extensions exist.&lt;/p&gt;
&lt;p&gt;Using Brave, you can visit my webpage at &lt;a href=&quot;ipfs://bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q&quot;&gt;ipfs://bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q&lt;/a&gt; (note the &lt;code&gt;ipfs://&lt;/code&gt; schema).&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/brave-with-ipfs.png&quot; alt=&quot;Brave showing a HTML file hosted on IPFS&quot; width=&quot;1200&quot; height=&quot;900&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;Brave showing my webpage hosted on IPFS.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;Step 4: Map your webpage to your domain name&lt;/h3&gt;
&lt;p&gt;Being able to visit your IPFS-hosted website is pretty neat, but you&#039;re probably not going to ask other people to check out your new webpage at ipfs://bafybeibbkhmln7o4ud6an4qk6bukcpri7nhiwv6pz6ygslgtsrey2c3o3q. Using a 60-character hexadecimal hash isn&#039;t exactly ideal.&lt;/p&gt;
&lt;p&gt;This is where ENS comes in. I just had to set the &lt;em&gt;Content Resolver&lt;/em&gt; record of &lt;code&gt;dries.eth&lt;/code&gt; to the IPFS hash associated with my webpage.&lt;/p&gt;
&lt;div class=&quot;large&quot;&gt;
  &lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/ens-content-resolver.png&quot; alt=&quot;Updating the Content Resolver record of an ENS domain&quot; width=&quot;1278&quot; height=&quot;958&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;Mapping the IPFS hash to &lt;code&gt;dries.eth&lt;/code&gt; is done by updating the Content Resolver record of the ENS domain on the &lt;a href=&quot;https://ens.domains/&quot;&gt;ENS Domains website&lt;/a&gt;.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/div&gt;
&lt;p&gt;Updating an ENS record permanently updates the state of the Ethereum blockchain. This means you have to pay a &amp;quot;gas fee&amp;quot;, or a network transaction fee. As you can see on &lt;a href=&quot;https://etherscan.io&quot;&gt;Etherscan&lt;/a&gt;, it cost me &lt;a href=&quot;https://etherscan.io/tx/0x5d72594efe7b3cca99304ea9c01f3cc2ed2ed21f8f2915932b5bb53abce5bc77&quot;&gt;0.004369 Ether&lt;/a&gt; ($11.69 at the time) to update my ENS record.&lt;/p&gt;
&lt;p&gt;You can now use an ENS and IPFS compatible browser to visit &lt;a href=&quot;https://dries.eth&quot;&gt;https://dries.eth&lt;/a&gt;. Voila, a &lt;em&gt;truly&lt;/em&gt; decentralized website!&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src=&quot;https://dri.es/files/images/blog/google-chrome-with-metamask.png&quot; alt=&quot;Google Chrome showing dries.eth using the Metamask extension&quot; width=&quot;1200&quot; height=&quot;900&quot; /&gt;
&lt;figcaption&gt;&lt;em&gt;&lt;code&gt;dries.eth&lt;/code&gt; rendered in Google Chrome with the &lt;a href=&quot;https://metamask.io/&quot;&gt;Metamask&lt;/a&gt; extension.&lt;/em&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;Are ENS and IPFS the future of the web?&lt;/h3&gt;
&lt;p&gt;There are various big shortcomings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It only works with static sites.&lt;/strong&gt; Most organizations use dynamic websites such as those rendered by &lt;a href=&quot;https://www.drupal.org/&quot;&gt;Drupal&lt;/a&gt; or &lt;a href=&quot;https://wordpress.org/&quot;&gt;WordPress&lt;/a&gt;. Of course, you can export simple Drupal sites (like this blog) to static HTML and upload those files to IPFS. But not all sites lend themselves to becoming static sites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It is too costly for many.&lt;/strong&gt; Every time you make changes to your website, and you redeploy to IPFS, you generate a new hash. A new hash means updating your ENS record, and updating your ENS record means paying gas fees. This becomes expensive when you have to update your site frequently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It is too slow for some.&lt;/strong&gt; Updating my ENS record was manual, requires approval of the transaction, and takes some time to settle on the blockchain. Not acceptable for news websites that need to get information out in real-time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lack of browser support.&lt;/strong&gt; Mainstream browsers still don&#039;t support ENS out-of-the-box. Until they do, Web3 feels like a parallel universe.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#039;m sure these shortcomings will be addressed in the years ahead. Some might already have solutions.&lt;/p&gt;
&lt;p&gt;Shortcomings aside, I believe IPFS and ENS hold promise:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I prefer using the IPFS API over Amazon&#039;s proprietary S3 API. It makes my web applications more portable. Open Source protocols are preferred.&lt;/li&gt;
&lt;li&gt;The idea that these services are both permissionless and programmable is mind-blowing. For example, it makes me wonder if I could create a &lt;a href=&quot;https://ethereum.org/en/smart-contracts/&quot;&gt;smart contract&lt;/a&gt; that automatically pays miners around the world to keep my blog and photo albums online for the next 250+ years. I&#039;d &lt;em&gt;love&lt;/em&gt; to explore that in a future blog post.&lt;/li&gt;
&lt;li&gt;ENS feels like a really useful building block for resolving and verifying various things. A global key-value store has many potential use cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;What does Web3 mean for developers?&lt;/h3&gt;
&lt;p&gt;If you are a developer, think of Web3 as a growing collection of new &amp;quot;web services&amp;quot;.&lt;/p&gt;
&lt;p&gt;IPFS and ENS are two such web services. Today, they mainly provide improved resiliency and censorship protection. If resiliency and censorship protection are important for your website, use them. If they are not, you don&#039;t have to use them. As the owner and developer of &lt;a href=&quot;https://dri.es&quot;&gt;https://dri.es&lt;/a&gt;, I don&#039;t care about censorship protection. For that reason, I&#039;m happy to keep using traditional hosting technologies. But I do recognize that IPFS and ENS could become more interesting in the future.&lt;/p&gt;
&lt;p class=&quot;pullquote&quot;&gt;In its current state, IPFS and ENS offer limited value to most website owners, but tremendous value to a very narrow subset of all website owners. That could change in the future.&lt;/p&gt;
&lt;h3&gt;What is the promise of Web3?&lt;/h3&gt;
&lt;p&gt;I do think it is important to watch the Web3 space. New and powerful Web3 services will emerge. The internet&#039;s desire to eliminate intermediates has raged on for 20+ years. It is an unstoppable trend. With Web3, more intermediaries face risk of disintermediation and decentralization.&lt;/p&gt;
&lt;p&gt;That includes organizations whose business model depends on proprietary databases and ledgers; financial institutions, central banks, certain non-profits, social communities. Many of these could turn into truly decentralized web services.&lt;/p&gt;
&lt;p&gt;For example, many commerce websites offer loans and loan repayment programs using intermediaries like PayPal or Square. In time, some of these intermediaries could be replaced by permissionless, distributed web services that charge less interest and/or smaller transaction fees. Imagine the day it becomes really easy for commerce websites to offer loan repayment programs directly to their customers without an intermediary. When profit margins stand to benefit, technology solutions gets adopted quickly.&lt;/p&gt;
&lt;p&gt;The blockchain will also enable us to solve coordination and ownership problems in new ways. Everyone who creates content on the web (images, music, videos, blog posts) could benefit from that. The ability for others to use your content, and for value to flow back to you programmatically is quite exciting.&lt;/p&gt;
&lt;p&gt;Most of all, I&#039;m hopeful that these decentralized services will help us advance how we govern public goods, &lt;a href=&quot;https://dri.es/balancing-makers-and-takers-to-scale-and-sustain-open-source&quot;&gt;how we sustain Open Source projects&lt;/a&gt;, and how we can meaningfully shift power back from large organizations to individuals and communities. But that is the topic for a future blog post.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;February, 2024 update:&lt;/strong&gt; Two years have passed since I last engaged with my Web3 site. I decided to review its current state, expand on some points in this blog post, and explore Web3&#039;s progress in the context of website hosting. Read my update at &lt;a href=&quot;https://dri.es/two-years-later-is-my-web3-website-still-standing&quot;&gt;Two years later: is my Web3 website still standing?&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
  </channel>
</rss>
