From 1b9ca884ead29a978e8cdc44b9ba2ad70f33725b Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Thu, 25 Jul 2024 17:57:01 +0200 Subject: [PATCH 01/24] feat: new ipfs on the web docs page --- docs/.vuepress/config.js | 6 ++-- docs/.vuepress/redirects | 1 + docs/how-to/browser-tools-frameworks.md | 32 ----------------- docs/how-to/ipfs-on-the-web.md | 46 +++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 35 deletions(-) delete mode 100644 docs/how-to/browser-tools-frameworks.md create mode 100644 docs/how-to/ipfs-on-the-web.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index b2f7b4978..ebd54ba3c 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -255,12 +255,12 @@ module.exports = { ] }, { - title: 'IPFS in the browser', + title: 'IPFS on the web', sidebarDepth: 1, collapsable: true, children: [ + '/how-to/ipfs-on-the-web', '/how-to/address-ipfs-on-web', - '/how-to/browser-tools-frameworks' ] }, { @@ -277,7 +277,7 @@ module.exports = { collapsable: true, children: [ '/how-to/gateway-best-practices', - '/how-to/gateway-troubleshooting' + '/how-to/gateway-troubleshooting', ] }, { diff --git a/docs/.vuepress/redirects b/docs/.vuepress/redirects index e2954dfd7..92b46067a 100644 --- a/docs/.vuepress/redirects +++ b/docs/.vuepress/redirects @@ -40,6 +40,7 @@ /guides/guides/addressing/ /how-to/address-ipfs-on-web /guides/guides/install/ /install /how-to/host-single-page-site /how-to/websites-on-ipfs/single-page-website +how-to/browser-tools-frameworks /how-to/ipfs-on-the-web/ /how-to/troubleshoot-file-transfers /how-to/troubleshooting /how-to/run-ipfs-inside-docker /install/run-ipfs-inside-docker /install/command-line-quick-start/ /how-to/command-line-quick-start diff --git a/docs/how-to/browser-tools-frameworks.md b/docs/how-to/browser-tools-frameworks.md deleted file mode 100644 index 9ed1e49d7..000000000 --- a/docs/how-to/browser-tools-frameworks.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Browser tools and frameworks -description: Information on how to use IPFS in combination with your favorite frameworks or browser implementation tools. ---- - -# Browser Tools and Frameworks - -Want to learn how to use IPFS in combination with your favorite framework or browser implementation tool? See below for some common examples, including hints and boilerplate code. Don't see your framework or tool of choice here? Let us know by [filing an issue](https://github.com/ipfs/ipfs-docs/issues/new?assignees=&labels=OKR+3%3A+Content+Improvement%2C+docs-ipfs&template=content-request.md&title=%5BCONTENT+REQUEST%5D+%20Browser%20Implementation%20Tools%20and%20Frameworks) in the IPFS docs GitHub repo. - -## Browserify - -[Example and boilerplate](https://github.com/ipfs-examples/js-ipfs-browser-browserify) you can use to guide yourself into bundling js-ipfs with browserify, so that you can use it in your own web app. - -## Parcel.js - -[Example and boilerplate application](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-parceljs) that connects to IPFS using js-ipfs and is bundled with Parcel.js, so that you can follow it for creating Parcel.js bundled js-ipfs dapps. - -## Vue - -[Minimal demonstration](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-vue) of how to use js-ipfs with Vue. - -## Webpack - -[Example and boilerplate](https://github.com/ipfs-examples/js-ipfs-examples/tree/master/examples/browser-webpack) you can use to guide yourself into bundling js-ipfs with webpack, so that you can use it in your own web app. - -## With a ` + +## Providing data + +In the examples above you saw how to address data by CID. But what you do with it depends on your use case. + +If you want to data to be retrievable by other peers on [Mainnet](../concepts/glossary.md#ipfs-mainnet) you will want to upload it to a pinning service or an IPFS node you run. + +### You probably don't want to provide data from a browser + +Browsers make for lousy servers. It's difficult to make a Web page "dialable", i.e. allow network incoming connections from other computers. There's one exception, namely WebRTC, however, it has many caveats. + +For this reason, you should almost never count on providing data from a browser to work. + +Instead, you should provide data from a long-running server that runs reliably and has a public IP. That can be a Kubo node that you run, or a [pinning service](../concepts/persistence.md#pinning-services). + + +### CAR files + +### Example: Uploading a file to a pinning service + +TODO: + +## Retrieval + +### With Verified-fetch + +

+ See the Pen + Fetch an image on IPFS Mainnet @helia/verified-fetch by Daniel Norman (@2color) + on CodePen. +

+ diff --git a/docs/how-to/ipfs-on-the-web.md b/docs/how-to/ipfs-on-the-web.md deleted file mode 100644 index ef8f15de7..000000000 --- a/docs/how-to/ipfs-on-the-web.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: IPFS on the web -description: How to use IPFS on the web, including IPFS retrieval and pinning in browsers using implementations. ---- - -# IPFS on the web - -## Challenges with IPFS on the Web - -One of the main benefits of IPFS is that CIDs allow you to fetch data from anyone **trustlessly** through hash verification. This foundation enables IPFS to function as a permissionless peer-to-peer network. - -However, making all of this work on the web is tricky. While web browsers have the widest proliferation as an application runtime, they impose many restrictions on what web pages can do. For example, a web page cannot just open TCP/UDP connections. It is mostly constrained to HTTP, WebSockets, WebRTC, and most recently WebTransport. There are good reasons for this like security and resource management, but ultimately, it means that **using IPFS on the Web is different to IPFS in native binaries.** - -Thus, the Web is both a **resource-constrained and API-constrained** environment. So practically everything on this page is applicaable - -## Onboarding, Retrieving, and Providing - -Ultimately, there are three things that you do with IPFS: -- Onboard data, i.e. take arbitrary data, chunk it, and structure it as a Merkle DAG represented by a single CID. -- Retrieve files and arbitrary data. Given a CID, you use IPFS to find providers (peers who share the block), connect to them *somehow*, fetch the blocks, and verify from peers who have the CID. Once that's all done, you save the block locally. -- Provide the block to others. - -### You probably don't want to rely on the web for providing - -Browsers make for lousy servers. It's almost impossible to make a web page "dialable", i.e. allow other computers to connect to it (the exception is WebRTC with many caveats). - -For this reason, for CIDs to it's recommended to delegate providing to an external server that runs reliably and has a public IP. That can be a Kubo node that you run, or a [pinning service](../concepts/persistence.md#pinning-services). - -## Onboarding - -Even when relying on another server for providing, it's recommended to handle chunking and Merkle-DAG construction locally in the browser and uploading a [CAR file](../concepts/glossary.md#car). This reduces the trust surface and allows you to know the CID ahead of the upload. - -## Retrieval - -### With Verified-fetch - - - - - - - From 3f6545c5fd7c92c9a995e672ae1fcd47004ed937 Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:02:21 +0100 Subject: [PATCH 03/24] fix: web apps guide --- docs/.vuepress/config.js | 2 +- docs/how-to/ipfs-in-web-apps.md | 24 +++++++++--------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index ebd54ba3c..81b596c8e 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -259,7 +259,7 @@ module.exports = { sidebarDepth: 1, collapsable: true, children: [ - '/how-to/ipfs-on-the-web', + '/how-to/ipfs-in-web-apps', '/how-to/address-ipfs-on-web', ] }, diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 5296700c2..107cc94db 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -1,6 +1,6 @@ --- title: IPFS in web applications -description: How to use IPFS in web applications, including IPFS retrieval and pinning in browsers using implementations such as Helia. +description: How to develop applications that use IPFS in web browsers, including IPFS retrieval and pinning in browsers using implementations such as Helia. --- # IPFS in web-applications and resource-constrained environments @@ -25,7 +25,6 @@ As a developer, IPFS exposes three main operations for interacting with the netw - **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. - **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies. - ## Addressing by CID @@ -60,15 +59,14 @@ console.info(cid) ### Example: Addressing a file by CID with unixfs -

- See the Pen + ## Providing data -In the examples above you saw how to address data by CID. But what you do with it depends on your use case. +In the examples above you saw how to address data by CID. But what you do with it depends on your use case. If you want to data to be retrievable by other peers on [Mainnet](../concepts/glossary.md#ipfs-mainnet) you will want to upload it to a pinning service or an IPFS node you run. @@ -80,20 +78,16 @@ For this reason, you should almost never count on providing data from a browser Instead, you should provide data from a long-running server that runs reliably and has a public IP. That can be a Kubo node that you run, or a [pinning service](../concepts/persistence.md#pinning-services). - ### CAR files -### Example: Uploading a file to a pinning service +CAR files offer a serialized representation of content-addressed resources in one single concatenated stream, alongside a header that describes that content. This makes them a great way to store content-addressed data in a way that is easy to transport and store. -TODO: ## Retrieval ### With Verified-fetch -

- See the Pen + From a4c4c07925d6a783acf35bb37a7e9d19b0f26d7f Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Mon, 16 Dec 2024 13:38:43 +0100 Subject: [PATCH 04/24] chore: add words to dictionary --- .github/styles/pln-ignore.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/styles/pln-ignore.txt b/.github/styles/pln-ignore.txt index a4025c9ae..818634931 100644 --- a/.github/styles/pln-ignore.txt +++ b/.github/styles/pln-ignore.txt @@ -128,6 +128,7 @@ mainnet markdown(lint) markdownlint merkle +merklizing metadata('s) metamask minimalistic @@ -140,6 +141,7 @@ multiaddrs multibase multicast multicodec +multicodec(s) multiformats multihash multihashes @@ -217,6 +219,7 @@ trustlessly uncensorable undialable uniswap +unixfs unreachability untrusted upgradeability From bc4bd628c4d3e1b0eafcd5887629add79bcdd350 Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:54:52 +0100 Subject: [PATCH 05/24] wip --- docs/concepts/lifecycle.md | 21 +++++++++++---------- docs/how-to/ipfs-in-web-apps.md | 2 +- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/concepts/lifecycle.md b/docs/concepts/lifecycle.md index bd0b5af16..3834bd6ef 100644 --- a/docs/concepts/lifecycle.md +++ b/docs/concepts/lifecycle.md @@ -5,17 +5,18 @@ description: Learn about the lifecycle of data in IPFS. # The lifecycle of data in IPFS -- [1. Content-addressable representation](#1-content-addressable-representation) -- [2. Pinning](#2-pinning) -- [3. Retrieval](#3-retrieval) -- [4. Deleting](#4-deleting) +- [1. Content-addressing](#1-content-addressing) +- [2. Providing](#2-providing) +- [3. Retrieving](#3-retrieving) - [Learn more](#learn-more) -## 1. Content-addressable representation +## 1. Content-addressing / Merkelizing -The file is transformed into a content-addressable representation using a CID. The basic idea is that this representation makes files and directories **content-addressable** via CIDs by chunking files into smaller blocks, calculating their hashes, and constructing a [Merkle DAG](./merkle-dag.md). +The first stage in the lifecycle of data in IPFS is to address it by CID. This is a local operation that takes arbitrary data and encodes it so it can be addressed by a CID. -## 2. Pinning +The exact process depends on the type of data. For files and directories, this is done by constructing a [UnixFS](./file-systems.md#unix-file-system-unixfs) [Merkle DAG](./merkle-dag.md). For other data types, such as dag-cbor, this is done by encoding the data with [dag-cbor](https://ipld.io/docs/codecs/known/dag-cbor/) which is hashed to produce a CID. + +## 2. Providing In this stage, the blocks of the CID are saved on an IPFS node (or pinning service) and made retrievable to the network. Simply saving the CID on the node does not mean the CID is retrievable, so pinning must be used. Pinning allows the node to advertise that it has the CID, and provide it to the network. @@ -23,7 +24,7 @@ In this stage, the blocks of the CID are saved on an IPFS node (or pinning servi - **Providing:** The content-addressable representation of the CID is persisted on one of web3.storage's IPFS nodes (servers running an IPFS node) and made publicly available to the IPFS network. -## 3. Retrieval +## 3. Retrieving In this stage, an IPFS node fetches the blocks of the CID and constructs the Merkle DAG. This usually involves several steps: @@ -35,13 +36,13 @@ In this stage, an IPFS node fetches the blocks of the CID and constructs the Mer - **Local access:** Once all blocks are present, the Merkle DAG can be constructed, making the file or directory underlying the CID successfully replicated and accessible. -## 4. Deleting + ## Learn more diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 107cc94db..8b729d5ee 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -21,7 +21,7 @@ There are good reasons for this like security and resource management, but ultim As a developer, IPFS exposes three main operations for interacting with the network: -- **Addressing data with CIDs** (also known as merkelising): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. +- **Addressing data with CIDs** (also known as merklizing): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. - **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. - **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies. From 00b720f2b117c9508e74afeeff2847512302784a Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:14:23 +0100 Subject: [PATCH 06/24] refine examples and add note about websites --- docs/how-to/ipfs-in-web-apps.md | 43 ++++++++++++++------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 8b729d5ee..ec959b0e6 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -5,17 +5,19 @@ description: How to develop applications that use IPFS in web browsers, includin # IPFS in web-applications and resource-constrained environments -This guide covers the key operations of IPFS in the context of web applications, including addressing, retrieving, and providing. +In this guide you will learn how to use IPFS in web applications, including addressing, retrieving, and providing. -For demonstration purposes, this guide uses [Helia](https://github.com/ipfs/helia), the most actively maintained library for using IPFS on the web and is the recommended library for most use cases. +In this guide, you will use [Helia](https://github.com/ipfs/helia), the most actively maintained TypeScript IPFS library for use on the web and the recommended library for most use cases. -## Challenges with IPFS on the Web +> **Note:** this guide is focused solely on using IPFS for data within a web application. It does _not_ cover using IPFS for static website distribution with IPFS Gateways. + +## Challenges with IPFS on the web IPFS allows you to fetch data by CID from multiple providers without being reliant on a single authoritative server. -However, making all of this work on the Web is tricky due to networking constraints. Browsers impose many restrictions on Web apps, for example, opening TCP/UDP connections is not possible. Instead, Web apps are constrained to HTTP, WebSockets, WebRTC, and most recently WebTransport. +However, making all of this work on the web is tricky due to networking constraints. Browsers impose many restrictions on web apps, for example, opening TCP/UDP connections is not possible. Instead, web apps are constrained to HTTP, WebSockets, WebRTC, and most recently WebTransport. -There are good reasons for this like security and resource management, but ultimately, it means that using IPFS on the Web is different to native binaries. +There are good reasons for this like security and resource management, but ultimately, it means that using IPFS on the web is different to native binaries. ## Key IPFS operations: Addressing, Retrieving, and Providing @@ -25,8 +27,7 @@ As a developer, IPFS exposes three main operations for interacting with the netw - **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. - **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies. - -## Addressing by CID +## Addressing data by CID As mentioned above, the first step in the [lifecycle of data in IPFS](../concepts/lifecycle.md) is to address it by CID. @@ -37,29 +38,22 @@ When addressing data by [CIDs](https://proto.school/anatomy-of-a-cid/03) you wil - [unixfs](../concepts/file-systems.md#unix-file-system-unixfs) for files and directories. - [dag-cbor](../concepts/glossary.md#dag-cbor) for json-like structured data with binary encoding. DAG-CBOR is an extension of CBOR that adds a "link" type for CIDs, allowing for the creation of interlinked CBOR objects (which can be used to form larger linked data structures). -As you can see, there are multiple ways to address data by CID. +### CID Determinism -One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, the multicodec you use, and the way you encode the data. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. See the [forum discussion](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) for more details and a possible solution. +One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, the multicodec you use, and the multicodec. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. See the [forum discussion](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) for more details. ### Example: Addressing an object by CID with dag-cbor For example, to address an object by CID with the `dag-cbor` multicodec and `sha2-256` hash function, you can use the following code using [Helia](https://github.com/ipfs/helia): -```ts -import { createHelia } from 'helia' -import { dagCbor } from '@helia/dag-cbor' - -const helia = await createHelia() -const d = dagCbor(helia) -const cid = await d.add({ hello: 'world' }) - -console.info(cid) -// CID(bafyreidykglsfhoixmivffc5uwhcgshx4j465xwqntbmu43nb2dzqwfvae) -``` + ### Example: Addressing a file by CID with unixfs - @@ -72,7 +66,7 @@ If you want to data to be retrievable by other peers on [Mainnet](../concepts/gl ### You probably don't want to provide data from a browser -Browsers make for lousy servers. It's difficult to make a Web page "dialable", i.e. allow network incoming connections from other computers. There's one exception, namely WebRTC, however, it has many caveats. +Browsers make for lousy servers. It's difficult to make a Web page a server, i.e. allow network incoming connections from other computers. There's one exception, namely WebRTC, however, it has many caveats. For this reason, you should almost never count on providing data from a browser to work. @@ -82,12 +76,11 @@ Instead, you should provide data from a long-running server that runs reliably a CAR files offer a serialized representation of content-addressed resources in one single concatenated stream, alongside a header that describes that content. This makes them a great way to store content-addressed data in a way that is easy to transport and store. - ## Retrieval ### With Verified-fetch - From 0db8c4541a73882805ef3918096c7fef3d3f5fcb Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Thu, 16 Jan 2025 17:05:30 +0100 Subject: [PATCH 07/24] progress on guide --- docs/how-to/ipfs-in-web-apps.md | 47 ++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index ec959b0e6..e209690cb 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -24,8 +24,8 @@ There are good reasons for this like security and resource management, but ultim As a developer, IPFS exposes three main operations for interacting with the network: - **Addressing data with CIDs** (also known as merklizing): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. -- **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. - **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies. +- **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. ## Addressing data by CID @@ -35,12 +35,16 @@ When addressing data by [CIDs](https://proto.school/anatomy-of-a-cid/03) you wil - [hash function](../concepts/glossary.md#hash-function). For use in browsers, the default and recommended hash function is `sha2-256` which is also the default for [helia](https://github.com/ipfs/helia). - [multicodec](../concepts/glossary.md#multicodec), which is the format of the data you are addressing and is used to help decode data. CIDs support a wide range of multicodecs, but for most intents and purposes, you will likely either want use: - - [unixfs](../concepts/file-systems.md#unix-file-system-unixfs) for files and directories. + - [UnixFS](../concepts/file-systems.md#unix-file-system-unixfs) for files and directories. - [dag-cbor](../concepts/glossary.md#dag-cbor) for json-like structured data with binary encoding. DAG-CBOR is an extension of CBOR that adds a "link" type for CIDs, allowing for the creation of interlinked CBOR objects (which can be used to form larger linked data structures). ### CID Determinism -One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, the multicodec you use, and the multicodec. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. See the [forum discussion](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) for more details. +One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, the multicodec you use, and the multicodec. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. + +See the [forum discussion on CID profiles](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) and the [DASL](https://dasl.ing/) initiative for more for more information on the nature of this problem and how the community is addressing it. + +[DAG Builder](https://dag.ipfs.tech/) is a web app that visualises UnixFS and demonstrates how the same file can result in different CIDs, depending on the different options that UnixFS supports. ### Example: Addressing an object by CID with dag-cbor @@ -58,29 +62,46 @@ For example, to address an object by CID with the `dag-cbor` multicodec and `sha Addressing an image by CID with Helia and UnixFS by Daniel Norman (@2color) +## Retrieval + +From a high level, there are several ways to retrieve data with IPFS in web applications: + +- Using the [`Verified Fetch`](https://www.npmjs.com/package/@helia/verified-fetch) library, which was modelled after the `fetch` API and returns `Response` objects, with the main difference being that it allows you to fetch data by CID, abstracting away the details of content routing, transports and retrieval. For more examples and background see the [release blog post](https://blog.ipfs.tech/verified-fetch/). +- Using the [`helia`](https://github.com/ipfs/helia/) library, which is the foundation for the `verified-fetch` library, and provides a more comprehensive and modular API for interacting with the IPFS network, beyond just retrieval. +- Using public recursive gateways, e.g. `ipfs.io` with HTTP. This is not recommended for most use cases, because it forgoes the verifiability and trustlessness enabled by content addressing. Granted, it might be the easiest way to retrieve data in a web application, but is also the most fraught with security and centralization concerns. + +### Example: Image retrieval with Verified Fetch + + + ## Providing data -In the examples above you saw how to address data by CID. But what you do with it depends on your use case. +For data to be retrievable by other peers on [IPFS Mainnet](../concepts/glossary.md#ipfs-mainnet) it will need to be uploaded to a pinning service or an IPFS node. -If you want to data to be retrievable by other peers on [Mainnet](../concepts/glossary.md#ipfs-mainnet) you will want to upload it to a pinning service or an IPFS node you run. +When possible, it's best to rely on client-side merklization to address data by CID and then upload it to a pinning service or a node. [CAR files](#car-files) are a great way to do this, though they are not supported by all pinning services. ### You probably don't want to provide data from a browser -Browsers make for lousy servers. It's difficult to make a Web page a server, i.e. allow network incoming connections from other computers. There's one exception, namely WebRTC, however, it has many caveats. +Browsers make for lousy servers. It's difficult to make a Web page a server, i.e. allow network incoming connections from other computers. WebRTC is the only exception, however, it has many caveats, and doesn't work in all networks. -For this reason, you should almost never count on providing data from a browser to work. +For this reason, you should never count on providing data from a browser to work. Instead, you should provide data from a long-running server that runs reliably and has a public IP. That can be a Kubo node that you run, or a [pinning service](../concepts/persistence.md#pinning-services). ### CAR files -CAR files offer a serialized representation of content-addressed resources in one single concatenated stream, alongside a header that describes that content. This makes them a great way to store content-addressed data in a way that is easy to transport and store. +The Content Archive format is a way of packaging up content addressed data into archive files that can be easily stored and transferred over the network. You can think of them like TAR files that are designed for storing collections of content addressed data. -## Retrieval +So why would you want to use CAR files? -### With Verified-fetch +One of the main reasons is related to [CID determinism](#cid-determinism). As mentioned above, the same data can result in different CIDs, which can make it difficult to verify data without its content addressed representation. By packaging up the data into a CAR file, you can upload the CAR to multiple pinning services and nodes knowing they are providing the same data, while also reducing the trust on third party pinning services. - From 30953c268c384624d79c9ae9888b42553132e3ba Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:23:33 +0100 Subject: [PATCH 08/24] refine points --- docs/how-to/ipfs-in-web-apps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index e209690cb..c962093a6 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -44,7 +44,7 @@ One important thing to note is that **the same data can result in different CIDs See the [forum discussion on CID profiles](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) and the [DASL](https://dasl.ing/) initiative for more for more information on the nature of this problem and how the community is addressing it. -[DAG Builder](https://dag.ipfs.tech/) is a web app that visualises UnixFS and demonstrates how the same file can result in different CIDs, depending on the different options that UnixFS supports. +For a visual demonstration of this, try the [DAG Builder](https://dag.ipfs.tech/), which visualises how files are addressed by CID with UnixFS and demonstrates how the same file can result in different CIDs, depending on the different options that UnixFS supports. ### Example: Addressing an object by CID with dag-cbor @@ -97,7 +97,7 @@ The Content Archive format is a way of packaging up content addressed data into So why would you want to use CAR files? -One of the main reasons is related to [CID determinism](#cid-determinism). As mentioned above, the same data can result in different CIDs, which can make it difficult to verify data without its content addressed representation. By packaging up the data into a CAR file, you can upload the CAR to multiple pinning services and nodes knowing they are providing the same data, while also reducing the trust on third party pinning services. +One of the main reasons is related to [CID determinism](#cid-determinism). As mentioned above, the same data can result in different CIDs, which can make it difficult to verify data without its content addressed representation. By packaging up the data into a CAR file, you can upload the CAR to multiple pinning services and nodes knowing they are providing the same CIDs Car files are a great way to store content-addressed data in a way that is easy to transport and store, and Helia (and other implementations) allow you to both export and import any data you've addressed by CID into a CAR file. From 6951b44c79643cb69afb7bb9faa40193ecf590a7 Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:02:15 +0100 Subject: [PATCH 09/24] Apply suggestions from code review Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- docs/how-to/ipfs-in-web-apps.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index c962093a6..a6d48e7ff 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -5,9 +5,9 @@ description: How to develop applications that use IPFS in web browsers, includin # IPFS in web-applications and resource-constrained environments -In this guide you will learn how to use IPFS in web applications, including addressing, retrieving, and providing. +In this guide you will learn how to use IPFS using JavaScript/TypeScript in web applications, including addressing data with CIDs, retrieval by CID, working with CAR files, and the the nuances of providing. -In this guide, you will use [Helia](https://github.com/ipfs/helia), the most actively maintained TypeScript IPFS library for use on the web and the recommended library for most use cases. +For this, you will use [Helia](https://github.com/ipfs/helia), the most actively maintained implementation of IPFS in TypeScript for use on the web. > **Note:** this guide is focused solely on using IPFS for data within a web application. It does _not_ cover using IPFS for static website distribution with IPFS Gateways. @@ -23,8 +23,8 @@ There are good reasons for this like security and resource management, but ultim As a developer, IPFS exposes three main operations for interacting with the network: -- **Addressing data with CIDs** (also known as merklizing): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. -- **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies. +- **Addressing data with CIDs** (also known as merkleizing): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. +- **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies that the retrieved data is what the CID represents. - **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. ## Addressing data by CID From 9c1038ce88b5d0adf8cb8ea6eb90504d5002ceeb Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:56:57 +0100 Subject: [PATCH 10/24] Update docs/concepts/lifecycle.md Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> --- docs/concepts/lifecycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/concepts/lifecycle.md b/docs/concepts/lifecycle.md index 3834bd6ef..5b5a53c49 100644 --- a/docs/concepts/lifecycle.md +++ b/docs/concepts/lifecycle.md @@ -10,7 +10,7 @@ description: Learn about the lifecycle of data in IPFS. - [3. Retrieving](#3-retrieving) - [Learn more](#learn-more) -## 1. Content-addressing / Merkelizing +## 1. Content-addressing / Merkleizing The first stage in the lifecycle of data in IPFS is to address it by CID. This is a local operation that takes arbitrary data and encodes it so it can be addressed by a CID. From 15cf7e5c0f5f16629603ea34ad5a4ae6c3359a14 Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 14:58:01 +0100 Subject: [PATCH 11/24] Apply suggestions from code review --- docs/how-to/ipfs-in-web-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index a6d48e7ff..b18426a15 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -81,7 +81,7 @@ From a high level, there are several ways to retrieve data with IPFS in web appl For data to be retrievable by other peers on [IPFS Mainnet](../concepts/glossary.md#ipfs-mainnet) it will need to be uploaded to a pinning service or an IPFS node. -When possible, it's best to rely on client-side merklization to address data by CID and then upload it to a pinning service or a node. [CAR files](#car-files) are a great way to do this, though they are not supported by all pinning services. +When possible, it's best to rely on client-side merkleization to address data by CID and then upload it to a pinning service or a node. [CAR files](#car-files) are a great way to do this, though they are not supported by all pinning services. ### You probably don't want to provide data from a browser From a514288d5de11533269e5cd1b88f9ed5b324aad0 Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:12:01 +0100 Subject: [PATCH 12/24] Apply suggestions from code review Co-authored-by: Alex Potsides --- docs/how-to/ipfs-in-web-apps.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index b18426a15..83e5f16d1 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -33,14 +33,14 @@ As mentioned above, the first step in the [lifecycle of data in IPFS](../concept When addressing data by [CIDs](https://proto.school/anatomy-of-a-cid/03) you will need to choose: -- [hash function](../concepts/glossary.md#hash-function). For use in browsers, the default and recommended hash function is `sha2-256` which is also the default for [helia](https://github.com/ipfs/helia). +- [hash function](../concepts/glossary.md#hash-function). For use in browsers, the default and recommended hash function is `sha2-256` which is also the default for [Helia](https://github.com/ipfs/helia). - [multicodec](../concepts/glossary.md#multicodec), which is the format of the data you are addressing and is used to help decode data. CIDs support a wide range of multicodecs, but for most intents and purposes, you will likely either want use: - [UnixFS](../concepts/file-systems.md#unix-file-system-unixfs) for files and directories. - [dag-cbor](../concepts/glossary.md#dag-cbor) for json-like structured data with binary encoding. DAG-CBOR is an extension of CBOR that adds a "link" type for CIDs, allowing for the creation of interlinked CBOR objects (which can be used to form larger linked data structures). ### CID Determinism -One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, the multicodec you use, and the multicodec. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. +One important thing to note is that **the same data can result in different CIDs** depending on a number of factors, including the hash function, and the multicodec you use. **This is especially true for files**, where the same file, hash function and multicodec can still result in different CIDs depending on the different options that UnixFS supports. See the [forum discussion on CID profiles](https://discuss.ipfs.tech/t/should-we-profile-cids/18507) and the [DASL](https://dasl.ing/) initiative for more for more information on the nature of this problem and how the community is addressing it. @@ -66,8 +66,8 @@ For example, to address an object by CID with the `dag-cbor` multicodec and `sha From a high level, there are several ways to retrieve data with IPFS in web applications: -- Using the [`Verified Fetch`](https://www.npmjs.com/package/@helia/verified-fetch) library, which was modelled after the `fetch` API and returns `Response` objects, with the main difference being that it allows you to fetch data by CID, abstracting away the details of content routing, transports and retrieval. For more examples and background see the [release blog post](https://blog.ipfs.tech/verified-fetch/). -- Using the [`helia`](https://github.com/ipfs/helia/) library, which is the foundation for the `verified-fetch` library, and provides a more comprehensive and modular API for interacting with the IPFS network, beyond just retrieval. +- Using the [`Verified Fetch`](https://www.npmjs.com/package/@helia/verified-fetch) library, which was modelled after the [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) and returns [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects, with the main difference being that it allows you to fetch data by CID, abstracting away the details of content routing, transports and retrieval. For more examples and background see the [release blog post](https://blog.ipfs.tech/verified-fetch/). +- Using the [`Helia`](https://github.com/ipfs/helia/) library, which is the foundation for the `verified-fetch` library, and provides a more comprehensive and modular API for interacting with the IPFS network, beyond just retrieval. - Using public recursive gateways, e.g. `ipfs.io` with HTTP. This is not recommended for most use cases, because it forgoes the verifiability and trustlessness enabled by content addressing. Granted, it might be the easiest way to retrieve data in a web application, but is also the most fraught with security and centralization concerns. ### Example: Image retrieval with Verified Fetch From 3a3033f6dca48de627afc472695a20e59bcc08c7 Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:14:50 +0100 Subject: [PATCH 13/24] fix: redirect consistently --- docs/.vuepress/redirects | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/.vuepress/redirects b/docs/.vuepress/redirects index 92b46067a..505b2b2f3 100644 --- a/docs/.vuepress/redirects +++ b/docs/.vuepress/redirects @@ -40,7 +40,7 @@ /guides/guides/addressing/ /how-to/address-ipfs-on-web /guides/guides/install/ /install /how-to/host-single-page-site /how-to/websites-on-ipfs/single-page-website -how-to/browser-tools-frameworks /how-to/ipfs-on-the-web/ +/how-to/browser-tools-frameworks /how-to/ipfs-on-the-web /how-to/troubleshoot-file-transfers /how-to/troubleshooting /how-to/run-ipfs-inside-docker /install/run-ipfs-inside-docker /install/command-line-quick-start/ /how-to/command-line-quick-start From c8fbf703de34d07d9d266a5e0cd777db08e1da6f Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:15:05 +0100 Subject: [PATCH 14/24] feat: add dag diagram to lifecycle doc --- docs/concepts/images/unixfs-dag-diagram.png | Bin 0 -> 132509 bytes docs/concepts/lifecycle.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 docs/concepts/images/unixfs-dag-diagram.png diff --git a/docs/concepts/images/unixfs-dag-diagram.png b/docs/concepts/images/unixfs-dag-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb28699ac0e7b98e212f6c5cd66957e575fb6e6 GIT binary patch literal 132509 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 z Date: Tue, 4 Feb 2025 15:15:41 +0100 Subject: [PATCH 15/24] add conclusion --- docs/how-to/ipfs-in-web-apps.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 83e5f16d1..0c905a167 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -1,6 +1,6 @@ --- title: IPFS in web applications -description: How to develop applications that use IPFS in web browsers, including IPFS retrieval and pinning in browsers using implementations such as Helia. +description: How to develop applications that use IPFS on the Web including addressing by CID, merkleizing, retrieval, providing, and CAR files with Helia. --- # IPFS in web-applications and resource-constrained environments @@ -23,7 +23,7 @@ There are good reasons for this like security and resource management, but ultim As a developer, IPFS exposes three main operations for interacting with the network: -- **Addressing data with CIDs** (also known as merkleizing): taking arbitrary data and encoding so its addressable by CID. For example, given a file and encoding it so it can be addressed by a CID. +- **Addressing data with CIDs** (also known as **merkleizing**): taking arbitrary data and encoding so its addressable by CID. For example, given a directory of files, merkleizing it so it can be addressed and retrieved by CID. - **Retrieving data by CID**: given a CID, IPFS finds providers (peers who share the block), connects to them, fetches the blocks, and verifies that the retrieved data is what the CID represents. - **Providing data by CID**: making data addressed by a CID retrievable by other peers, either by running a node or with a pinning service. @@ -95,7 +95,7 @@ Instead, you should provide data from a long-running server that runs reliably a The Content Archive format is a way of packaging up content addressed data into archive files that can be easily stored and transferred over the network. You can think of them like TAR files that are designed for storing collections of content addressed data. -So why would you want to use CAR files? +**So why would you want to use CAR files?** One of the main reasons is related to [CID determinism](#cid-determinism). As mentioned above, the same data can result in different CIDs, which can make it difficult to verify data without its content addressed representation. By packaging up the data into a CAR file, you can upload the CAR to multiple pinning services and nodes knowing they are providing the same CIDs @@ -105,3 +105,23 @@ Car files are a great way to store content-addressed data in a way that is easy See the Pen CAR export with Helia and dag-cbor by Daniel Norman (@2color) + +At the time of writing, not all pinning services support CAR files, but it is a feature that is being added to more and more services. Therefore, it is a good idea to check the documentation for the pinning service you are using to see if it supports CAR files. + +## Conclusion + +This guide has covered the essential aspects of using IPFS in web applications: + +- The main operations: addressing/merkleizing data with CIDs, retrieving data, and providing data. +- The challenges and limitations of using IPFS in browser environments. +- Practical examples using modern tools like [Helia](https://github.com/ipfs/helia) and [Verified Fetch](https://www.npmjs.com/package/@helia/verified-fetch). +- Best practices for handling data persistence through pinning services and CAR files. + +When building web applications with IPFS, remember these key takeaways: + +1. Use client-side merkleization (addressing) when onboarding new data to IPFS, but rely on pinning services or IPFS nodes for providing data. +1. Be mindful of CID determinism when working with files and structured data. +1. Consider using CAR files where possible for storage and transport of content-addressed data. +1. Use Verified Fetch for simple retrieval or Helia for more complex IPFS interactions. + +By following these guidelines, you can reap the benefits of IPFS while working within the constraints of the web. From d26c2f1439ff684b8d3d0d561df25c149877288b Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:20:21 +0100 Subject: [PATCH 16/24] ci: add merkleizing to dictionary --- .github/styles/pln-ignore.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/styles/pln-ignore.txt b/.github/styles/pln-ignore.txt index 818634931..68113de1b 100644 --- a/.github/styles/pln-ignore.txt +++ b/.github/styles/pln-ignore.txt @@ -129,6 +129,7 @@ markdown(lint) markdownlint merkle merklizing +merkleizing metadata('s) metamask minimalistic From 18cb392394f4e9108126de92aa93954e64816acb Mon Sep 17 00:00:00 2001 From: Daniel N <2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:40:41 +0100 Subject: [PATCH 17/24] fix: value check errors --- .github/styles/pln-ignore.txt | 3 +++ docs/how-to/ipfs-in-web-apps.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/styles/pln-ignore.txt b/.github/styles/pln-ignore.txt index 68113de1b..b46a8bbaf 100644 --- a/.github/styles/pln-ignore.txt +++ b/.github/styles/pln-ignore.txt @@ -130,6 +130,7 @@ markdownlint merkle merklizing merkleizing +merkleization metadata('s) metamask minimalistic @@ -142,6 +143,7 @@ multiaddrs multibase multicast multicodec +multicodecs multicodec(s) multiformats multihash @@ -217,6 +219,7 @@ testground testnet toolkits trustlessly +trustlessness uncensorable undialable uniswap diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 0c905a167..a93911aa1 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -119,7 +119,7 @@ This guide has covered the essential aspects of using IPFS in web applications: When building web applications with IPFS, remember these key takeaways: -1. Use client-side merkleization (addressing) when onboarding new data to IPFS, but rely on pinning services or IPFS nodes for providing data. +1. Use client-side merkleization (addressing) when adding new data to IPFS, but rely on pinning services or IPFS nodes for providing data. 1. Be mindful of CID determinism when working with files and structured data. 1. Consider using CAR files where possible for storage and transport of content-addressed data. 1. Use Verified Fetch for simple retrieval or Helia for more complex IPFS interactions. From 2715a29d887f14174087926a9f398529cacc762e Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:49:54 +0100 Subject: [PATCH 18/24] Update docs/how-to/ipfs-in-web-apps.md --- docs/how-to/ipfs-in-web-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index a93911aa1..9607655d1 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -5,7 +5,7 @@ description: How to develop applications that use IPFS on the Web including addr # IPFS in web-applications and resource-constrained environments -In this guide you will learn how to use IPFS using JavaScript/TypeScript in web applications, including addressing data with CIDs, retrieval by CID, working with CAR files, and the the nuances of providing. +In this guide you will learn how to use IPFS using JavaScript/TypeScript in web applications, including addressing data with CIDs, retrieval by CID, working with CAR files, and the nuances of providing. For this, you will use [Helia](https://github.com/ipfs/helia), the most actively maintained implementation of IPFS in TypeScript for use on the web. From f50082c14bb4ea277bdc2c6d30045a69583c1cda Mon Sep 17 00:00:00 2001 From: Daniel Norman <1992255+2color@users.noreply.github.com> Date: Mon, 10 Feb 2025 12:39:18 +0100 Subject: [PATCH 19/24] Update docs/how-to/ipfs-in-web-apps.md --- docs/how-to/ipfs-in-web-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 9607655d1..2f20ae84c 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -3,7 +3,7 @@ title: IPFS in web applications description: How to develop applications that use IPFS on the Web including addressing by CID, merkleizing, retrieval, providing, and CAR files with Helia. --- -# IPFS in web-applications and resource-constrained environments +# IPFS in web applications and resource-constrained environments In this guide you will learn how to use IPFS using JavaScript/TypeScript in web applications, including addressing data with CIDs, retrieval by CID, working with CAR files, and the nuances of providing. From 489bf7baca6fedbfd294e50854cb301b13fded57 Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 11 Feb 2025 00:58:42 +0100 Subject: [PATCH 20/24] nit: better / fixes glossary links proto.school is not future-proof, better point at glossary --- docs/how-to/ipfs-in-web-apps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index 2f20ae84c..ff1dbb3de 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -31,9 +31,9 @@ As a developer, IPFS exposes three main operations for interacting with the netw As mentioned above, the first step in the [lifecycle of data in IPFS](../concepts/lifecycle.md) is to address it by CID. -When addressing data by [CIDs](https://proto.school/anatomy-of-a-cid/03) you will need to choose: +When addressing data by [CIDs](../concepts/glossary.md#cid) you will need to choose: -- [hash function](../concepts/glossary.md#hash-function). For use in browsers, the default and recommended hash function is `sha2-256` which is also the default for [Helia](https://github.com/ipfs/helia). +- [hash function](../concepts/glossary.md#hash). For use in browsers, the default and recommended hash function is `sha2-256` which is also the default for [Helia](https://github.com/ipfs/helia). - [multicodec](../concepts/glossary.md#multicodec), which is the format of the data you are addressing and is used to help decode data. CIDs support a wide range of multicodecs, but for most intents and purposes, you will likely either want use: - [UnixFS](../concepts/file-systems.md#unix-file-system-unixfs) for files and directories. - [dag-cbor](../concepts/glossary.md#dag-cbor) for json-like structured data with binary encoding. DAG-CBOR is an extension of CBOR that adds a "link" type for CIDs, allowing for the creation of interlinked CBOR objects (which can be used to form larger linked data structures). From c9f6de1721531bfa845d53a27e648882055e494c Mon Sep 17 00:00:00 2001 From: Marcin Rataj Date: Tue, 11 Feb 2025 01:01:18 +0100 Subject: [PATCH 21/24] nit: UnixFS --- docs/how-to/ipfs-in-web-apps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/how-to/ipfs-in-web-apps.md b/docs/how-to/ipfs-in-web-apps.md index ff1dbb3de..6c8752dcb 100644 --- a/docs/how-to/ipfs-in-web-apps.md +++ b/docs/how-to/ipfs-in-web-apps.md @@ -55,7 +55,7 @@ For example, to address an object by CID with the `dag-cbor` multicodec and `sha Addressing an object by CID with Helia and dag-cbor by Daniel Norman (@2color) -### Example: Addressing a file by CID with unixfs +### Example: Addressing a file by CID with UnixFS