CINXE.COM

IPFS Tutorial | Blogging on the Decentralized Web (Resources) | ProtoSchool

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="google-site-verification" content="kex8f9OaacZS2GAJ_M5UupW0x-h4X3zYj8qaPJNV2JM"><link rel="icon" href="/favicon.png"><link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"><style>body { font-family: 'Roboto', sans-serif; }</style><link href="/css/build~contribute~course~error~events~home~host~lessons~news~resources~tutorial~tutorials.9f55d702.css" rel="prefetch"><link href="/css/course.31c08d4e.css" rel="prefetch"><link href="/css/course~tutorials.27374047.css" rel="prefetch"><link href="/css/events.4c481b3e.css" rel="prefetch"><link href="/css/home.c0f58b45.css" rel="prefetch"><link href="/css/host.31c08d4e.css" rel="prefetch"><link href="/css/lessons~news~resources.20a35763.css" rel="prefetch"><link href="/css/lessons~resources.3652ded5.css" rel="prefetch"><link href="/css/news.e977f534.css" rel="prefetch"><link href="/css/tutorial.03be5c30.css" rel="prefetch"><link href="/css/tutorials.add412f2.css" rel="prefetch"><link href="/js/build.fb7f1ac9.js" rel="prefetch"><link href="/js/build~contribute~course~error~events~home~host~lessons~news~resources~tutorial~tutorials.aaaf1d75.js" rel="prefetch"><link href="/js/chunk-2d2308b7.6545c029.js" rel="prefetch"><link href="/js/chunk-57f93a34.17161cb9.js" rel="prefetch"><link href="/js/contribute.e80e18ae.js" rel="prefetch"><link href="/js/course.bbd1c058.js" rel="prefetch"><link href="/js/course~home~lessons~resources~tutorial~tutorials.079464d3.js" rel="prefetch"><link href="/js/course~tutorials.e74c9221.js" rel="prefetch"><link href="/js/error.40b634fd.js" rel="prefetch"><link href="/js/events.e291911a.js" rel="prefetch"><link href="/js/home.c4f67a23.js" rel="prefetch"><link href="/js/host.8f5c6970.js" rel="prefetch"><link href="/js/lessons.bc344ab5.js" rel="prefetch"><link href="/js/lessons~news~resources.22b8280e.js" rel="prefetch"><link href="/js/lessons~resources.dc695446.js" rel="prefetch"><link href="/js/news.8f7b61c4.js" rel="prefetch"><link href="/js/resources.4d6694a0.js" rel="prefetch"><link href="/js/tutorial.844a23e6.js" rel="prefetch"><link href="/js/tutorials.afeff307.js" rel="prefetch"><link href="/css/app.1237bf28.css" rel="preload" as="style"><link href="/css/chunk-vendors.a4530562.css" rel="preload" as="style"><link href="/js/app.da476859.js" rel="preload" as="script"><link href="/js/chunk-vendors.15f6ce0a.js" rel="preload" as="script"><link href="/css/chunk-vendors.a4530562.css" rel="stylesheet"><link href="/css/app.1237bf28.css" rel="stylesheet"><style type="text/css">.resize-observer[data-v-8859cc6c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-8859cc6c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}</style><link rel="stylesheet" type="text/css" href="/css/build~contribute~course~error~events~home~host~lessons~news~resources~tutorial~tutorials.9f55d702.css"><script charset="utf-8" src="/js/build~contribute~course~error~events~home~host~lessons~news~resources~tutorial~tutorials.aaaf1d75.js"></script><script charset="utf-8" src="/js/course~home~lessons~resources~tutorial~tutorials.079464d3.js"></script><link rel="stylesheet" type="text/css" href="/css/lessons~news~resources.20a35763.css"><script charset="utf-8" src="/js/lessons~news~resources.22b8280e.js"></script><link rel="stylesheet" type="text/css" href="/css/lessons~resources.3652ded5.css"><script charset="utf-8" src="/js/lessons~resources.dc695446.js"></script><script charset="utf-8" src="/js/resources.4d6694a0.js"></script><title>IPFS Tutorial | Blogging on the Decentralized Web (Resources) | ProtoSchool</title><link data-vue-meta="1" rel="canonical" href="https://proto.school/blog/resources/"><meta data-vue-meta="1" property="og:url" content="https://proto.school/blog/resources/" data-vmid="og:url"><meta data-vue-meta="1" property="og:type" content="website" data-vmid="og:type"><meta data-vue-meta="1" property="og:site_name" content="ProtoSchool" data-vmid="og:site_name"><meta data-vue-meta="1" name="twitter:card" content="summary_large_image" data-vmid="twitter:card"><meta data-vue-meta="1" name="twitter:site" content="@ProtoSchool" data-vmid="twitter:site"><script charset="utf-8" src="/js/chunk-57f93a34.17161cb9.js"></script><meta data-vue-meta="1" property="og:title" content="IPFS Tutorial | Blogging on the Decentralized Web (Resources)" data-vmid="og:title"><meta data-vue-meta="1" property="og:description" content="Learning resources to supplement ProtoSchool's IPFS tutorial, Blogging on the Decentralized Web." data-vmid="og:description"><meta data-vue-meta="1" name="description" content="Learning resources to supplement ProtoSchool's IPFS tutorial, Blogging on the Decentralized Web." data-vmid="description"><meta data-vue-meta="1" property="og:image" content="https://proto.school/social-tiles/twitter/tutorials/blog.jpg" data-vmid="og:image"><meta data-vue-meta="1" name="twitter:image" content="https://proto.school/social-tiles/twitter/tutorials/blog.jpg" data-vmid="twitter:image"><meta data-vue-meta="1" name="twitter:image:alt" content="IPFS Tutorial | Blogging on the Decentralized Web (Resources)" data-vmid="twitter:image:alt"></head><body><noscript><strong>We're sorry but ProtoSchool doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"><div data-v-77486b8c="" class="" project="ipfs"><!----><div data-v-4cf932a9="" data-v-77486b8c="" class="home"><header data-v-4cf932a9=""><section data-v-4cf932a9="" class="bg-navy white pv3"><div data-v-4cf932a9="" class="flex-auto flex items-center center mw7 ph3"><a data-v-4cf932a9="" href="/" class="router-link-active"><svg data-v-4cf932a9="" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 116 135" alt="ProtoSchool" class="w3"><path data-v-4cf932a9="" d="M58.291 0L0 33.518v67.035l58 33.517 58-33.517V33.518L58.291 0zm53.92 44.593l-33.226-27.98 33.518 19.236v8.744h-.292zM13.407 63.246L25.94 28.563l8.16-1.457-20.693 36.14zm23.025-34.1h43.719l21.859 37.89-21.86 37.889H36.433l-21.86-37.89 21.86-37.89zM11.658 67.909l20.694 36.141L8.744 75.779l2.914-7.87zm65.578 39.93l-36.14 6.412-5.247-6.412h41.387zm25.94-37.015l-12.533 34.684-8.16 1.457 20.693-36.14zm1.749-4.663L83.94 30.02l23.608 28.27-2.623 7.87zm-65.87-39.93l36.141-6.412 5.246 6.412H39.055zm35.85-9.035l-44.01 7.87 37.014-13.408 6.995 5.538zM23.316 27.688L8.16 69.658l6.995-39.055 8.16-2.915zM6.704 77.528l28.562 34.392L4.955 86.271l1.749-8.743zm34.974 39.638l44.01-7.87-37.306 13.408-6.704-5.538zm51.588-10.784l15.156-41.97-6.995 39.055-8.16 2.915zm16.613-49.84l-28.854-34.1L111.337 47.8l-1.458 8.744zM65.869 9.036L24.774 23.9 58.29 4.663l7.578 4.372zM11.95 31.477L4.08 74.613V35.85l7.87-4.372zm-7.869 58l33.518 27.98L4.08 98.221v-8.744zm46.634 35.558l41.095-14.864-33.517 19.236-7.578-4.372zm53.919-22.442l7.578-43.136v38.764l-7.578 4.372z" fill="url(#paint0_linear)"></path><defs data-v-4cf932a9=""><linearGradient data-v-4cf932a9="" id="paint0_linear" x1=".136" y1="67.052" x2="116.42" y2="67.052" gradientUnits="userSpaceOnUse"><stop data-v-4cf932a9="" stop-color="#22F2AD"></stop><stop data-v-4cf932a9="" offset="1" stop-color="#AB21F4"></stop></linearGradient></defs></svg></a><div data-v-4cf932a9="" class="header-text ml3"><a data-v-4cf932a9="" href="/" class=" header-title ma0 fw4 white router-link-active"><span data-v-4cf932a9="" class="montserrat fw4">Proto</span><span data-v-4cf932a9="" class="montserrat fw2">School</span></a><div data-v-4cf932a9="" class="header-slogan ma0 montserrat fw3"> Interactive tutorials on decentralized web protocols </div></div></div></section><nav data-v-133bbc60="" data-v-4cf932a9="" class="bg-aqua"><div data-v-133bbc60="" class="dn db-ns center mw7 pv3 ph3"><div data-v-133bbc60="" class="link-list flex overflow-auto items-center bg-aqua navy f5 fw6 center tc mw7"><a data-v-133bbc60="" href="/tutorials" class="nav-link navy">Tutorials</a><span data-v-133bbc60="" class="fw4">&gt;</span><a data-v-133bbc60="" href="/blog" class="nav-link navy router-link-active" data-cy="tutorial-landing-link">Blog</a></div></div><div data-v-133bbc60="" class="db dn-ns"><div data-v-133bbc60="" class="flex items-center bg-aqua ph3 pv3 w-100"><div data-v-133bbc60="" class="flex-auto link fw5 f5 db bb border-aqua navy"><a data-v-133bbc60="" href="/tutorials" class="nav-link navy">Tutorials</a><span data-v-133bbc60="" class="fw4"> &gt; </span><a data-v-133bbc60="" href="/blog" class="nav-link navy router-link-active">Blog</a></div><button data-v-133bbc60="" class="menu-toggle button-reset bg-transparent b--transparent"><svg data-v-133bbc60="" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="none" stroke="#2c3e50" stroke-width="3" style="display:inline-block;vertical-align:middle;overflow:visible;" alt="open navigation menu" class=""><path data-v-133bbc60="" d="M0 2.5 L16 2.5"></path><path data-v-133bbc60="" d="M0 8 L16 8"></path><path data-v-133bbc60="" d="M0 13.5 L16 13.5"></path></svg></button></div><div data-v-133bbc60="" class="dn"><div data-v-133bbc60="" class="tc bg-aqua-muted white"><div data-v-133bbc60=""><a data-v-133bbc60="" href="/" class="router-link-active navy link pa3 fw5 f4 db bb border-aqua">Home</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/tutorials" class="navy link pa3 fw5 f4 db bb border-aqua">Tutorials</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/events" class="navy link pa3 fw5 f4 db bb border-aqua">Events</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/contribute" class="navy link pa3 fw5 f4 db bb border-aqua">Contribute</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/host" class="navy link pa3 fw5 f4 db bb border-aqua">Host</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/build" class="navy link pa3 fw5 f4 db bb border-aqua">Build</a></div><div data-v-133bbc60=""><a data-v-133bbc60="" href="/news" class="navy link pa3 fw5 f4 db bb border-aqua">News</a></div></div></div></div></nav></header></div><div data-v-77486b8c="" class="container center-l mw7-l ph3"><section data-v-77486b8c="" class="mw7 center mt3 pt2"><div data-v-77486b8c="" class="flex flex-row justify-between green"><div data-v-1887532e="" data-v-77486b8c="" class="lh-title v-mid f4"><span data-v-1887532e="" class="b">Blog</span> | <span data-v-1887532e="">Resources</span><!----></div><svg data-v-77486b8c="" id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" alt="Resource links" class="h2 ml3 has-tooltip" data-original-title="null"><path d="M39.27 24.52v11a3.78 3.78 0 01-3.79 3.79h-21a3.78 3.78 0 01-3.79-3.79v-21a3.78 3.78 0 013.79-3.79h11M30.68 10.73h7.88a.71.71 0 01.71.71V19M38.56 11.44l-9.41 9.41" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="3px"></path></svg></div><!----><!----><!----><div data-v-77486b8c="" data-cy="resources-content" class="lesson-text lh-copy mb4"><!----><h1>Resources</h1><p> Ready to learn more? There are plenty of additional resources to explore, both in ProtoSchool and beyond. <span>Here are some of our favorites:</span></p><div class="mb3"><p class="ma0 flex items-center"><a href="https://proto.school/merkle-dags" target="_blank" class="b blue link">Merkle DAGs: Structuring Data for the Distributed Web</a><span class="ml2 ph2 bg-navy br-pill white f7">tutorial</span><span class="ml2 ph2 bg-aqua br-pill white f7">ProtoSchool</span></p><div class="ma0 resource-desc"><p>Learn about the benefits of Merkle DAGs, unique content-addressed data structures for the distributed web. (No coding required.)</p> </div></div><div class="mb3"><p class="ma0 flex items-center"><a href="https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/DAG.md" target="_blank" class="b blue link">JS-IPFS DAG API</a><span class="ml2 ph2 bg-navy br-pill white f7">docs</span><!----></p><!----></div><div class="mb3"><p class="ma0 flex items-center"><a href="https://youtu.be/Z5zNPwMDYGg" target="_blank" class="b blue link">Understanding How IPFS Deals with Files</a><span class="ml2 ph2 bg-navy br-pill white f7">video</span><!----></p><div class="ma0 resource-desc"><p>This course from IPFS Camp 2019 offers a deep exploration of how IPFS deals with files, including key concepts like immutability, content addressing, hashing, the anatomy of CIDs, what the heck a Merkle DAG is, and how chunk size affects file imports.</p> </div></div><div class="mb3"><p class="ma0 flex items-center"><a href="https://youtu.be/fLUq0RkiTBA" target="_blank" class="b blue link">The Lifecycle of Data in the DWeb</a><span class="ml2 ph2 bg-navy br-pill white f7">video</span><!----></p><div class="ma0 resource-desc"><p>Curious about what happens <em>after</em> you've added data to IPFS? This IPFS Camp 2019 course explores how peers discover and share files on the network, from providing to getting to pinning to deleting.</p> </div></div><div class="mb3"><p class="ma0 flex items-center"><a href="https://proto.school/regular-files-api" target="_blank" class="b blue link">IPFS: Regular Files API</a><span class="ml2 ph2 bg-navy br-pill white f7">tutorial</span><span class="ml2 ph2 bg-aqua br-pill white f7">ProtoSchool</span></p><div class="ma0 resource-desc"><p>Ready to deal with more than primitives? Explore the API custom-built for efficient handling of files in IPFS.</p> </div></div><div class="flex flex-wrap items-start mb5 mt4"><a data-v-836385cc="" href="/course/ipfs" class="inline-flex justify-center avenir dib v-mid fw7 nowrap lh-copy bn br1 pointer bg-navy white outline-focus pv2 ph3 bg-navy white mb3 mr3" data-cy="all-tutorials"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="mr2" style="height: 1.5em;"><defs><linearGradient id="a" y2="771.51" gradientUnits="userSpaceOnUse" x2="527.72" y1="771.51" x1="84.315"><stop stop-color="#4a9ea1" offset="0"></stop></linearGradient><linearGradient id="b" y2="771.48" gradientUnits="userSpaceOnUse" x2="512.36" y1="771.48" x1="99.675"><stop stop-color="#63d3d7" offset="0"></stop></linearGradient></defs><path d="M84.315 899.51l221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z" fill="url(#a)" transform="translate(-50.017 -515.51)"></path><path fill="url(#b)" d="M283.13 546.35l-160.74 92.806a38.396 38.396 0 010 8.59l160.75 92.805c13.554-10 32.043-10 45.597 0l160.75-92.807a38.343 38.343 0 01-.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03L344 767.22c1.884 16.739-7.361 32.751-22.799 39.489l.18 184.58a38.386 38.386 0 017.439 4.294l160.75-92.805c-1.884-16.739 7.36-32.752 22.799-39.49v-185.61a38.397 38.397 0 01-7.44-4.294zm-397.81 1.032a38.387 38.387 0 01-7.438 4.295v185.61c15.438 6.738 24.683 22.75 22.799 39.489l160.74 92.806a38.4 38.4 0 017.44-4.295v-185.61c-15.439-6.738-24.684-22.75-22.8-39.49l-160.74-92.81z" transform="translate(-50.017 -515.51)"></path><path d="M256 512l221.7-128V128L256 256v256z" fill-opacity=".251"></path><path d="M256 512V256L34.3 128v256L256 512z" fill-opacity=".039"></path><path d="M34.298 128l221.7 128 221.7-128-221.7-128-221.7 128z" fill-opacity=".13"></path></svg><span>IPFS Course</span></a><a data-v-836385cc="" href="/course/ipld" class="inline-flex justify-center avenir dib v-mid fw7 nowrap lh-copy bn br1 pointer bg-navy white outline-focus pv2 ph3 bg-navy white mb3 mr3" data-cy="all-tutorials"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 71 81" class="mr2" style="height: 1.5em;"><g fill-rule="nonzero" fill="none"><path d="M70.638 58.696V21.994c0-1.25-.667-2.405-1.75-3.03L37.103.613a3.499 3.499 0 00-3.498 0L1.82 18.963a3.498 3.498 0 00-1.75 3.03v36.703c0 1.25.667 2.405 1.75 3.03l31.785 18.35a3.499 3.499 0 003.498 0l31.785-18.35a3.498 3.498 0 001.75-3.03z" fill="#1D74F2"></path><g transform="translate(3.754 4.692)" fill="#FFF"><path d="M31.6 70.24L1.23 52.455V19.034L31.6 1.066l.043.024L61.97 18.317v34.139l-.043.025L31.6 70.239v.001zM1.402 52.356L31.6 70.039l30.198-17.682v-33.94L31.6 1.266 1.402 19.132v33.225-.001z"></path><path d="M30.909 10.953h1.382v59.186h-1.382z"></path><circle cx="31.6" cy="11.068" r="2.175"></circle><path d="M30.939 27.127l-6.642-4.196v-8.048h1.382v7.287l5.998 3.789z"></path><g transform="translate(31.346 32.284)"><path d="M.784 22.438L.046 21.27l22.73-14.36V3.77h1.383v3.903z"></path><circle cx="23.468" cy="2.308" r="2.175"></circle></g><path d="M42.357 31.103h1.382v16.121h-1.382V31.103zM31.086 43.632L14.26 34.383V27.01h1.382v6.58l16.139 8.848-.695 1.194z"></path><circle cx="14.951" cy="26.396" r="2.175"></circle><circle cx="24.988" cy="16.52" r="2.175"></circle><g transform="translate(31.158 22.149)"><path d="M14.308 3.784v3.143L.124 15.887c.011.533.03 1.068.049 1.603L15.69 7.688V3.785h-1.382v-.001z"></path><circle cx="14.999" cy="2.323" r="2.175"></circle></g><path d="M32.08 31.103l6.641-4.195v-8.049H37.34v7.287l-5.998 3.789z"></path><circle cx="38.03" cy="18.859" r="2.175"></circle><circle cx="24.657" cy="30.397" r="2.175"></circle><path d="M23.966 30.917h1.382v8.687h-1.382z"></path><g transform="translate(6.194 34.537)"><path d="M25.031 20.367l.739-1.168L3.038 6.804V3.662H1.656v3.904z"></path><circle cx="2.347" cy="2.201" r="2.175"></circle></g><path d="M16.78 35.652h1.238v11.171H16.78z"></path><circle cx="31.6" cy="69.912" r="1.213"></circle><g transform="translate(0 18.02)"><circle cx="1.23" cy="34.437" r="1.213"></circle><circle cx="1.23" cy="1.351" r="1.213"></circle></g><g transform="translate(60.627 18.02)"><circle cx="1.343" cy="34.359" r="1.213"></circle><circle cx="1.343" cy="1.273" r="1.213"></circle></g><circle cx="31.599" cy="1.393" r="1.213"></circle></g></g></svg><span>IPLD Course</span></a></div><div data-v-626a86c7="" class="mv4"><div data-v-626a86c7="" data-state="idle" data-state-view-active="true" class="newsletter-subscription content-banner state-view flex flex-column items-center navy"><h2 data-v-626a86c7="" class="tc lh-title">Subscribe to Our Newsletter</h2><p data-v-626a86c7="" class="subscribe-message tc f7 mb4">We'll let you know when we release new tutorials or site features.</p><form data-v-626a86c7="" novalidate="novalidate" method="POST" target="_blank" action="https://school.us4.list-manage.com/subscribe/post?u=41e9e493c56c3865870435d91&amp;id=967f7cf514&amp;EMAIL=&amp;subscribe=Subscribe" class="flex flex-row-ns flex-column justify-center flex-wrap"><div data-v-626a86c7="" aria-hidden="true" style="position: absolute; left: -5000px;"><input data-v-626a86c7="" type="text" name="b_41e9e493c56c3865870435d91_967f7cf514" tabindex="-1"></div><label data-v-638af9e2="" data-v-626a86c7="" data-error-message="Field is required." tabindex="-1" class="form-input email-input mr3-ns mb3-ns mb3 order-1"><input data-v-638af9e2="" type="email" name="email" placeholder="Email Address" class="input-reset br1 ph3 f5 b--light-gray navy fw5"></label><button data-v-009ce952="" data-v-626a86c7="" data-type="submit" type="submit" class="inline-flex justify-center avenir dib v-mid fw7 nowrap lh-copy bn br1 pointer bg-navy white outline-focus pv2 ph3 submit-button mt4 mt0-ns order-2-ns order-3"><span data-v-009ce952="" class="loader"></span><span data-v-009ce952="" class="text">Sign Up</span></button><label data-v-4de11833="" data-v-626a86c7="" tabindex="0" class="form-checkbox flex flex-row items-start f7 outline-focus leaders-updates-input w-100 order-3-ns order-2"><input data-v-4de11833="" type="checkbox" tabindex="-1" class="input-reset br1 ph3 f5 b--light-gray navy fw6"> Send me additional news and guidance for local event leaders. </label></form></div></div></div></section><!----><div data-v-723eff7c="" data-v-77486b8c="" class="mw7 center"><div data-v-723eff7c="" class="mb3 ph2 tr"><div data-v-723eff7c=""><a data-v-836385cc="" data-v-723eff7c="" href="/tutorials" class="inline-flex justify-center avenir dib v-mid fw7 nowrap lh-copy bn br1 pointer bg-navy white outline-focus pv2 ph3 bg-navy white" data-cy="more-tutorials">More Tutorials</a></div></div></div></div><div data-v-77486b8c="" class="mt4 ph3-ns bg-aqua navy"><div data-v-77486b8c="" class="mw7 center ph3"><p data-v-77486b8c="">How did you feel about this tutorial? We'd love to hear your thoughts and suggestions for improvement! Please <a data-v-77486b8c="" href="https://github.com/ProtoSchool/protoschool.github.io/issues/new?assignees=&amp;labels=tutorial-feedback&amp;template=tutorial-feedback.md&amp;title=Tutorial+Feedback%253A+Blog" target="_blank">share your feedback</a>.</p></div></div><footer data-v-a0fc7dd0="" data-v-77486b8c="" data-cy="footer-component" class="bg-navy white pt5-m pt5-l pt4 pb2 "><div data-v-a0fc7dd0="" class="flex mw7 ph3 center flex-wrap"><div data-v-a0fc7dd0="" class="w-33-l w-100 mb0-l mb3"><a data-v-a0fc7dd0="" href="/" class="flex items-center link router-link-active"><svg data-v-a0fc7dd0="" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 116 135" alt="ProtoSchool" class="w2 mr2 "><path data-v-a0fc7dd0="" d="M58.291 0L0 33.518v67.035l58 33.517 58-33.517V33.518L58.291 0zm53.92 44.593l-33.226-27.98 33.518 19.236v8.744h-.292zM13.407 63.246L25.94 28.563l8.16-1.457-20.693 36.14zm23.025-34.1h43.719l21.859 37.89-21.86 37.889H36.433l-21.86-37.89 21.86-37.89zM11.658 67.909l20.694 36.141L8.744 75.779l2.914-7.87zm65.578 39.93l-36.14 6.412-5.247-6.412h41.387zm25.94-37.015l-12.533 34.684-8.16 1.457 20.693-36.14zm1.749-4.663L83.94 30.02l23.608 28.27-2.623 7.87zm-65.87-39.93l36.141-6.412 5.246 6.412H39.055zm35.85-9.035l-44.01 7.87 37.014-13.408 6.995 5.538zM23.316 27.688L8.16 69.658l6.995-39.055 8.16-2.915zM6.704 77.528l28.562 34.392L4.955 86.271l1.749-8.743zm34.974 39.638l44.01-7.87-37.306 13.408-6.704-5.538zm51.588-10.784l15.156-41.97-6.995 39.055-8.16 2.915zm16.613-49.84l-28.854-34.1L111.337 47.8l-1.458 8.744zM65.869 9.036L24.774 23.9 58.29 4.663l7.578 4.372zM11.95 31.477L4.08 74.613V35.85l7.87-4.372zm-7.869 58l33.518 27.98L4.08 98.221v-8.744zm46.634 35.558l41.095-14.864-33.517 19.236-7.578-4.372zm53.919-22.442l7.578-43.136v38.764l-7.578 4.372z" fill="url(#paint0_linear)"></path><defs data-v-a0fc7dd0=""><linearGradient data-v-a0fc7dd0="" id="paint0_linear" x1=".136" y1="67.052" x2="116.42" y2="67.052" gradientUnits="userSpaceOnUse"><stop data-v-a0fc7dd0="" stop-color="#22F2AD"></stop><stop data-v-a0fc7dd0="" offset="1" stop-color="#AB21F4"></stop></linearGradient></defs></svg><div data-v-a0fc7dd0="" class="ma0 fw4 white f3"><span data-v-a0fc7dd0="" class="montserrat fw4">Proto</span><span data-v-a0fc7dd0="" class="montserrat fw2">School</span></div></a></div><div data-v-a0fc7dd0="" class="w-20-l w-25-m w-33 column "><span data-v-a0fc7dd0="" class="fw7">Courses</span><ul data-v-a0fc7dd0="" class="list pl0"><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/course/ipfs" class="link underline-hover white o-80 glow">IPFS </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/course/ipld" class="link underline-hover white o-80 glow">IPLD </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/course/filecoin" class="link underline-hover white o-80 glow">Filecoin </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/course/multiformats" class="link underline-hover white o-80 glow">Multiformats </a></li></ul></div><div data-v-a0fc7dd0="" class="w-20-l w-25-m w-33 column "><span data-v-a0fc7dd0="" class="fw7">Community</span><ul data-v-a0fc7dd0="" class="list pl0"><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://github.com/protoschool" class="link underline-hover white o-80 glow">GitHub </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://twitter.com/protoschool" class="link underline-hover white o-80 glow">Twitter </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/news" class="link underline-hover white o-80 glow">Newsletter </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/contribute" class="link underline-hover white o-80 glow">Contribute </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="" data-cy="footer-link-internal" href="/contribute#contact" class="link underline-hover white o-80 glow">Contact </a></li></ul></div><div data-v-a0fc7dd0="" class="w-20-l w-25-m w-33 column "><span data-v-a0fc7dd0="" class="fw7">Related Projects</span><ul data-v-a0fc7dd0="" class="list pl0"><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://ipfs.tech" class="link underline-hover white o-80 glow">IPFS </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://filecoin.io" class="link underline-hover white o-80 glow">Filecoin </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://ipld.io" class="link underline-hover white o-80 glow">IPLD </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://libp2p.io" class="link underline-hover white o-80 glow">libp2p </a></li><li data-v-a0fc7dd0="" class="pv1"><a data-v-a0fc7dd0="" target="_blank" data-cy="footer-link-external" href="https://multiformats.io" class="link underline-hover white o-80 glow">Multiformats </a></li></ul></div></div><div data-v-a0fc7dd0="" class="flex justify-start mt4 mw7 center ph3 f7 o-70"><div data-v-a0fc7dd0="" class="w-33-l"></div><p data-v-a0fc7dd0="">漏 <a data-v-a0fc7dd0="" target="_blank" href="https://protocol.ai" class="link underline white o-80 glow">Protocol Labs</a> | Except as <a data-v-a0fc7dd0="" target="_blank" href="https://protocol.ai/legal/" class="link underline white o-80 glow">noted</a>, content licensed <a data-v-a0fc7dd0="" target="_blank" href="https://creativecommons.org/licenses/by/3.0/deed.en" class="link underline white o-80 glow">CC-BY 3.0</a>.</p></div></footer></div><div class="vue-portal-target"></div></div><script type="text/javascript" async="" src="https://countly.proto.school/sdk/web/countly.min.js"></script><script>// https://github.com/schalkneethling/dnt-helper/blob/master/js/dnt-helper.js function _dntEnabled (dnt, userAgent) { 'use strict' var dntStatus = dnt || navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack var ua = userAgent || navigator.userAgent var anomalousWinVersions = ['Windows NT 6.1', 'Windows NT 6.2', 'Windows NT 6.3'] var fxMatch = ua.match(/Firefox\/(\d+)/) var ieRegEx = /MSIE|Trident/i var isIE = ieRegEx.test(ua) var platform = ua.match(/Windows.+?(?=;)/g) if (isIE && typeof Array.prototype.indexOf !== 'function') { return false } else if (fxMatch && parseInt(fxMatch[1], 10) < 32) { dntStatus = 'Unspecified' } else if (isIE && platform && anomalousWinVersions.indexOf(platform.toString()) !== -1) { dntStatus = 'Unspecified' } else { dntStatus = { '0': 'Disabled', '1': 'Enabled' }[dntStatus] || 'Unspecified' } return dntStatus === 'Enabled' } // Some default pre init var Countly = Countly || {}; Countly.q = Countly.q || []; const COUNTLY_KEY_PROTOSCHOOL = 'c785b6eaa9c61617e1a7db83cb437e5f3dfe4280'; const COUNTLY_KEY_PROTOSCHOOL_TEST = '50f696b92cba4fe18cf60f37349f7c757625a871'; const COUNTLY_URL = 'https://countly.proto.school'; (function(){ if (!window.Cypress && !_dntEnabled()) { // Provide countly initialization parameters Countly.app_key = location.hostname === 'proto.school' ? COUNTLY_KEY_PROTOSCHOOL : COUNTLY_KEY_PROTOSCHOOL_TEST; Countly.url = COUNTLY_URL; // Choose what to track Countly.q.push(['track_sessions']); Countly.q.push(['track_pageview']); Countly.q.push(['track_clicks']); Countly.q.push(['track_scrolls']); Countly.q.push(['track_links']); // Load countly script asynchronously var cly = document.createElement('script'); cly.type = 'text/javascript'; cly.async = true; cly.src = 'https://countly.proto.school/sdk/web/countly.min.js'; cly.onload = function(){ Countly.init() Countly.getViewUrl = function () { return location.pathname + location.search + location.hash; } }; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(cly, s); } })();</script><script src="/js/chunk-vendors.15f6ce0a.js"></script><script src="/js/app.da476859.js"></script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10