72 Commits

Author SHA1 Message Date
Daniel N
5a288c4788 fix: typo 2025-03-01 08:29:15 +01:00
Daniel N
68a7bc12f7 fix: link to wallet 2025-03-01 08:27:17 +01:00
Daniel Norman
3abbd21e5c add lidel (#710)
Co-authored-by: Daniel N <2color@users.noreply.github.com>
2025-02-28 23:40:45 +01:00
Daniel Norman
510e74a0ad Could IPFS have prevented the Bybit hack? (#708)
* initial draft

* chore: fix preview/permalink

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>

* chore: address feedback

* whitespace

* refine point about gateways

* improve formatting

* update date and title

* Update src/_blog/bybit-hack.md

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* add final words

* update description

* add space between buttons

* blockchains

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>
2025-02-28 23:23:25 +01:00
Daniel Norman
a3a23e78ca ci: add workflow to deploy to ipfs (#709)
Co-authored-by: Daniel N <2color@users.noreply.github.com>
2025-02-28 16:39:30 +01:00
Bumblefudge
e4547c5f60 Link typo in shipyard-2024.md (#702) 2025-02-19 11:23:28 +01:00
Daniel Norman
16a364375a add link to autotls blog post (#706)
* add link to autotls blog post

* fix: publish date

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
2025-02-17 13:12:11 +01:00
Marcin Rataj
36970c328f chore: kubo 0.33.2 2025-02-14 15:26:32 +01:00
Marcin Rataj
a40ce95110 chore: kubo 0.33.1 2025-02-04 23:04:07 +01:00
Marcin Rataj
3431900b5f chore: ipfs-desktop v0.41.0 (#705) 2025-01-31 17:52:29 +01:00
Marcin Rataj
929381c390 chore: kubo 0.33 (#704) 2025-01-30 22:49:18 +01:00
Daniel N
39b17f68c2 fix: typo in diagram 2024-12-17 10:48:40 +01:00
Daniel Norman
7cd6e97cbd fix: typos in ipfs web blog post (#703) 2024-12-05 15:06:37 +01:00
Daniel Norman
e25009d426 Add IPFS on the Web update blog post (#699)
* add shipyard update blog post

* progress

* Update shipyard-2024.md

Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>

* Update shipyard-2024.md

Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* add more meat

* add todos

* add links

* refinements

* update title and description

* fix: use consistent x emoji

* mention orbitdb

* diagrams and refinements

* add autotls diagrams

* add link to js-libp2p roadmap

* add verified fetch p2p example and refine wording

* refine point about decentralization

* add cta buttons

* small fixes

* chore: update publish date

* final edits

* better positioning of cta

* fix: asset

* refinement

* some correction

* Update src/_blog/shipyard-2024.md

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* Apply suggestions from code review

Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>

* Apply suggestions from code review

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2024-11-25 19:03:01 +01:00
Marcin Rataj
4c50608c16 chore: kubo 0.32.1 2024-11-15 22:24:19 +01:00
Marcin Rataj
1c1522258f chore: kubo v0.32 (#701) 2024-11-14 03:42:07 +01:00
Andrew Gillis
a47a68a382 Merge pull request #698 from ipfs/update-kubo-v0.31.0
Update Kubo: v0.31.0
2024-10-16 21:16:21 -10:00
gammazero
85c0b0ede2 Update Kubo: v0.31.0
This PR updates Kubo to v0.31.0
2024-10-16 21:06:49 -10:00
Daniel N
cc3e4b4e88 fix: typo 2024-10-07 16:57:17 +02:00
Daniel Norman
40a05856ba add ipfs-check blog post (#697)
* add ipfs-check blog post

* add alt text to image

* Optimised images with calibre/image-actions

* fix: cover

* fix: publish date

* update headers

* Apply suggestions from code review

Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>

* small refinements

* chore: update publish date

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2024-10-07 16:47:26 +02:00
Marcin Rataj
17647d11c1 chore: add Kubo 0.30.0 release note (#696) 2024-09-11 18:49:14 +02:00
Daniel Norman
44b2194fb6 feat: add ipfs check video (#695)
* feat: add ipfs check video

* chore: update publish date

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
2024-09-05 11:50:23 +02:00
Marcin Rataj
09870e84ba fix: missing permalink for brave post 2024-08-26 20:22:45 +02:00
Marcin Rataj
f48372afe6 fix: lint 2024-08-26 19:54:40 +02:00
Marcin Rataj
2b5b8d4367 fix: discourseReferrerPolicy
https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#setting-the-referrer-policy-7
https://developer.chrome.com/blog/referrer-policy-new-chrome-default
2024-08-26 19:43:53 +02:00
Daniel Norman
f53364f31e fix: update publishing date (#694) 2024-08-26 19:25:16 +02:00
Marcin Rataj
67c1eefc45 chore: disable countly script 2024-08-26 19:13:43 +02:00
Marcin Rataj
623d406fc5 blogpost: Migrating From Brave to IPFS Desktop (#693)
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>
2024-08-26 18:34:21 +02:00
Marcin Rataj
82d2383357 chore: escape email to avoid spam 2024-06-12 20:22:10 +02:00
Daniel Norman
8ab214c419 Add link to WebRTC guide in libp2p docs (#692)
* add WebRTC guide

* add header image

* Optimised images with calibre/image-actions

* update image

* fix date

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-06-12 13:36:17 +02:00
Marcin Rataj
be51e7efa3 Merge pull request #691 from ipfs/kubo-v0.29.0
Update Kubo: v0.29.0
2024-06-10 22:37:44 +02:00
Marcin Rataj
fbe8fb1ea6 chore: add Kubo release note 2024-06-10 20:33:07 +00:00
dame.eth
c63db0d0d0 Merge pull request #690 from ipfs/damedoteth-patch-1
Update newscoverage.md
2024-05-15 15:03:21 -04:00
dame.eth
aa390803ad Update newscoverage.md 2024-05-15 14:58:45 -04:00
dame.eth
f8fa3f9816 Merge pull request #689 from darobin/update-2024-track-list
Update to track listing
2024-05-02 16:13:16 -04:00
Robin Berjon
eab7cee788 rewrite, not yet gaming track 2024-05-02 16:06:32 -04:00
dame.eth
f3e3a447ae Merge pull request #688 from ipfs/damedoteth-patch-1
Create newsletter-204.md
2024-05-01 16:06:42 -04:00
dame.eth
89f8aec5cc Update newsletter-204.md 2024-05-01 15:46:54 -04:00
dame.eth
4842c10f94 Update newsletter-204.md 2024-05-01 13:08:55 -04:00
dame.eth
cf2974515a Create newsletter-204.md 2024-05-01 13:03:47 -04:00
Daniel Norman
b92527d1d0 fix: typo (#686)
Co-authored-by: Daniel N <2color@users.noreply.github.com>
2024-04-23 12:39:23 +02:00
Daniel Norman
d7d6da8772 @helia/verified-fetch announcement (#683)
* feat: draft of the verified fetch blog post

* feat: add gateway diagram

* feat: more content

* feat: add final section

* edit: use iframes and edits

* Apply suggestions from code review

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* feat: finish the blog post draft

* feat: add header image and description

* Update src/_blog/verified-fetch.md

Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>

* feat: add more examples showing content type sniffing

* chore: update publish date

* fix: typo

* fix: mention peer-to-peer with example

* chore: update publish date

* feat: add link to survey

---------

Co-authored-by: Daniel N <2color@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com>
2024-04-18 14:04:03 +02:00
Henrique Dias
ecb56c3d89 chore: add Kubo release note (#684) 2024-04-15 11:19:42 +02:00
dame.eth
522e897675 Merge pull request #682 from ipfs/damedoteth-patch-1
Create ipfs-camp-2024-track-list.md
2024-04-11 12:38:35 -04:00
dame.eth
beacdfd1c6 Update ipfs-camp-2024-track-list.md 2024-04-11 12:33:59 -04:00
dame.eth
ff8999430a Create ipfs-camp-2024-track-list.md 2024-04-11 12:24:01 -04:00
dame.eth
3e947b3b51 Merge pull request #681 from ipfs/damedoteth-patch-1
Update events.md
2024-04-10 11:31:22 -04:00
dame.eth
dcbe1db31c Update events.md 2024-04-10 11:25:47 -04:00
Adin Schmahmann
262e36fadb fix: typo in shipyard-hello-world.md (#680) 2024-04-08 19:07:01 -04:00
dame.eth
89eecb7d60 Merge pull request #679 from ipfs/damedoteth-patch-1
Update shipyard-hello-world.md
2024-04-08 15:03:59 -04:00
dame.eth
a46a232df8 Update shipyard-hello-world.md 2024-04-08 14:52:10 -04:00
dame.eth
4f67ce26bb Merge pull request #677 from ipfs/blog/shipyard-hello-world
shipyard hello world blog post
2024-04-08 13:49:49 -04:00
Adin Schmahmann
6aefa60e13 Update src/_blog/shipyard-hello-world.md 2024-04-08 13:43:51 -04:00
Adin Schmahmann
771c8d3029 Update src/_blog/shipyard-hello-world.md 2024-04-08 13:43:09 -04:00
dame.eth
d7c47ad359 Update shipyard-hello-world.md 2024-04-08 13:22:59 -04:00
Marcin Rataj
8ef53548ad chore: improve table of Shipyard projects (#678)
* chore: improve implementations table

adds useful links and annotations, allowing reader to explore details of
each area

---------

Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
2024-04-08 12:36:10 -04:00
Adin Schmahmann
de62b7c1ca Update src/_blog/shipyard-hello-world.md 2024-04-08 12:34:23 -04:00
Adin Schmahmann
1601db89b3 Apply suggestions from code review 2024-04-03 14:18:55 -04:00
Adin Schmahmann
31f47f5440 Apply suggestions from code review 2024-04-03 14:17:45 -04:00
Adin Schmahmann
502c7a6982 Apply suggestions from code review 2024-04-03 14:08:26 -04:00
Adin Schmahmann
42e42ed7aa Apply suggestions from code review
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
2024-04-03 13:48:46 -04:00
Adin Schmahmann
bff9a6cce7 feat: shipyard-hello-world blog post 2024-03-29 15:49:59 -04:00
dame.eth
9699289147 Merge pull request #676 from ipfs/damedoteth-patch-1
Create newsletter-203.md
2024-03-28 12:19:25 -04:00
dame.eth
b06d783f1c Create newsletter-203.md 2024-03-28 11:54:02 -04:00
Marcin Rataj
ba9c8e2334 chore: finish reframe deprecation (#675)
This takes care of some outdated blogposts pointing at Reframe.
We point at /routing/v1 instead, and add disclaimers where needed.

Context: https://github.com/ipfs/kubo/issues/9479
2024-03-22 16:14:26 +01:00
Henrique Dias
7ef9095e82 chore: add Kubo release note (#674) 2024-03-04 13:07:09 +01:00
dame.eth
c7a2b8f161 Merge pull request #673 from ipfs/damedoteth-patch-1
Create newsletter-202.md
2024-02-29 13:20:34 -05:00
dame.eth
b3c6e38a53 Create newsletter-202.md 2024-02-28 14:16:41 -05:00
dame.eth
62954b2499 Merge pull request #672 from ipfs/damedoteth-patch-1
Add IPFS Camp 2024 link to blog
2024-02-21 13:11:36 -05:00
github-actions[bot]
08e43240da Optimised images with calibre/image-actions 2024-02-21 17:55:40 +00:00
dame.eth
7f20188e37 Update events.md 2024-02-21 12:51:43 -05:00
dame.eth
11c7c7a975 Add files via upload 2024-02-21 12:49:10 -05:00
50 changed files with 1571 additions and 18 deletions

41
.github/workflows/build-and-deploy.yml vendored Normal file
View File

@@ -0,0 +1,41 @@
name: Build and Deploy to IPFS
permissions:
contents: read
pull-requests: write
statuses: write
on:
push:
branches:
- main
pull_request:
jobs:
build-and-deploy:
runs-on: ubuntu-latest
outputs: # This exposes the CID output of the action to the rest of the workflow
cid: ${{ steps.deploy.outputs.cid }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- uses: ipfs/ipfs-deploy-action@v1
name: Deploy to IPFS
id: deploy
with:
path-to-deploy: dist
storacha-key: ${{ secrets.STORACHA_KEY }}
storacha-proof: ${{ secrets.STORACHA_PROOF }}
github-token: ${{ github.token }}

12
package-lock.json generated
View File

@@ -6364,9 +6364,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001549",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz",
"integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==",
"version": "1.0.30001651",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
"integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
"dev": true,
"funding": [
{
@@ -30071,9 +30071,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001549",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz",
"integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==",
"version": "1.0.30001651",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
"integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
"dev": true
},
"caseless": {

View File

@@ -6,7 +6,7 @@
"scripts": {
"start": "npm run dev",
"dev": "vuepress dev src",
"build": "vuepress build src && npm run postbuild",
"build": "NODE_OPTIONS=--openssl-legacy-provider vuepress build src && npm run postbuild",
"postbuild": "./scripts/data/index.js",
"lint": "prettier --write \"**/*.{json,yaml,md}\" && run-p lint:**",
"lint:eslint": "eslint --cache \"**/*.{js,vue}\" --fix",

View File

@@ -35,12 +35,13 @@ export default {
window.DiscourseEmbed = {
discourseUrl: 'https://discuss.ipfs.tech/',
discourseEmbedUrl: safePermalink(this.$frontmatter.permalink, this.$frontmatter.date),
discourseReferrerPolicy: 'strict-origin-when-cross-origin', // https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#setting-the-referrer-policy-7
}
const d = document.createElement('script')
d.type = 'text/javascript'
d.async = true
d.src = window.DiscourseEmbed.discourseUrl + 'javascripts/embed.js'
document.getElementsByTagName('body')[0].appendChild(d)
;(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d)
},
}
</script>

View File

@@ -37,7 +37,10 @@ export function loadScript() {
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(cly, s);
})();`
document.body.appendChild(countlyScript)
// Countly was disabled in 2024Q1
// https://github.com/ipfs/ipfs-webui/issues/2198
// https://github.com/ipfs-shipyard/ignite-metrics/issues/133
// document.body.appendChild(countlyScript)
}
/*

View File

@@ -0,0 +1,174 @@
---
title: 'Migrating from Brave to IPFS Desktop'
description: 'Complete Guide to Migrating Your IPFS Data'
permalink: '/2024-brave-migration-guide/'
date: 2024-08-26
header_image: '/brave2desktop.jpg'
tags:
- brave
- browsers
- IPFS Desktop
---
In [2021](https://brave.com/blog/ipfs-support/), IPFS maintainers worked with the Brave team to add native support for IPFS in the Brave Browser. This was the first deep integration of an IPFS node in a browser.
After over three years, the Brave team [decided](https://github.com/brave/brave-browser/issues/37735) to remove support for running IPFS node as we could not find a mutually agreeable set of terms to make this integration sustainable. The removal was implemented in the latest stable release ([v1.69.153](https://github.com/brave/brave-browser/blob/56f6418ac301a4b015c1188786f6f4497b6ac393/CHANGELOG_DESKTOP.md#169153)) which shipped on Aug 22nd.
While this change may be disappointing for some, it presents an opportunity to adopt a more robust and flexible IPFS setup.
This guide will walk you through the process of moving your IPFS data from Brave to [IPFS Desktop](https://github.com/ipfs/ipfs-desktop), ensuring you don't lose any of your important files, and keep access to IPFS resources in your browser.
## Why Migrate?
- **Imminent Removal:** The IPFS node feature in Brave is being [phased out](https://github.com/brave/brave-browser/issues/37735#issuecomment-2247764368) and will happen once you update to v1.69.153 or later. Although upgrading will not delete data associated with the IPFS node, migration is necessary to ensure uninterrupted access to your IPFS data, especially if you pinned something, or published with IPNS.
- **Improved Functionality:** Migrating to a standalone IPFS solution like IPFS Desktop offers several advantages:
1. Automatic security and performance updates without relying on browser updates.
2. Ability to customize your IPFS node configuration, no vendor-specific overrides.
3. Browser-agnostic background service, allowing your node to run independently of any specific browser.
4. Easy access to your files in [WebUI](https://github.com/ipfs/ipfs-webui/#readme) via system status bar icon, and right-click file manager integration (on Windows).
### Time Investment
Migrating your IPFS node is a relatively quick process. Most users can complete the transition in 5 to 15 minutes, depending on their familiarity with IPFS and their system configuration.
## Prerequisites
Before we begin, you'll need to install two key components that will replace the functionality that was in Brave with an IPFS stack that will still work in Brave, but also in most other browsers.
- [IPFS Desktop](https://docs.ipfs.tech/install/ipfs-desktop/) is a full node application that runs [Kubo](https://github.com/ipfs/kubo/) on your computer, managing your IPFS repository and providing a graphical interface for IPFS operations. Download IPFS Desktop by following the [install guide here](https://docs.ipfs.tech/install/ipfs-desktop/#install-instructions). Choose the appropriate version for your operating system ([Windows](https://docs.ipfs.tech/install/ipfs-desktop/#windows), [macOS](https://docs.ipfs.tech/install/ipfs-desktop/#macos), or [Linux](https://docs.ipfs.tech/install/ipfs-desktop/#ubuntu)) and follow the installation instructions.
- [IPFS Companion](https://docs.ipfs.tech/install/ipfs-companion/) is a browser extension that allows you to interact with IPFS content directly from your web browser, load it from your local IPFS node, and keep provisional support for `ipfs://` and `ipns://` in address bar. The easiest way to install IPFS Companion is through your browser's specific [extensions and add-ons store](https://docs.ipfs.tech/install/ipfs-companion/#install).
## Moving the Brave IPFS Repository
The IPFS repository, often referred to as `$IPFS_PATH` (aka `~/.ipfs`), contains all your IPFS data, IPNS keys, and PeerID identify of your IPFS node. Brave's IPFS Node used the same repository format as Kubo, making migration to IPFS Desktop relatively easy.
If you did not use IPFS Desktop before, you can simply swap `.ipfs` created by IPFS Desktop with the one from your Brave node. This is the simplest way of migrating your node, all data, pins, IPNS keys, addresses and PeerID will remain the same and IPNS publishing will continue working.
First, we need to locate your Brave IPFS repository. The configuration directory for the Brave managed IPFS node can be found in the browsers profile directory in a subfolder named `brave_ipfs`. You can find your IPFS directory by opening `brave://version/`, finding "Profile Path", and replacing `/Default` with `/brave_ipfs`:
<!-- TODO: confirm these paths are valid -->
- Windows: `%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\brave_ipfs`
- example: `C:\Users\YOURUSERNAME\AppData\Local\BraveSoftware\Brave-Browser\User Data\brave_ipfs`
- macOS: `~/Library/Application Support/BraveSoftware/Brave-Browser/brave_ipfs`
- example: `/Users/YOURUSERNAME/Library/Application Support/BraveSoftware/Brave-Browser/brave_ipfs`
- Linux: `~/.config/BraveSoftware/Brave-Browser/brave_ipfs`
- example: `/home/YOURUSERNAME/.config/BraveSoftware/Brave-Browser/brave_ipfs`
To confirm you've found the right directory, open `brave_ipfs/config` and write down the value of `PeerID`, it will act as unique identifier of your Brave repository.
Now, we'll move this repository to the default location for IPFS Desktop:
- Windows: `%USERPROFILE%/.ipfs`
- example: `C:\Users\YOURUSERNAME\.ipfs`
- macOS: `~/.ipfs`
- example: `/Users/YOURUSERNAME/.ipfs`
- Linux: `~/.ipfs`
- example: `/home/YOURUSERNAME/.ipfs`
Before proceeding, make sure the `.ipfs` directory does not exist at the destination. If you already had `.ipfs`, shut down IPFS Desktop and rename `.ipfs` to `.ipfs.old` as a precaution to avoid data loss.
Now, move the `brave_ipfs` directory from Brave profile, to the location expected by IPFS Desktop.
You can use the following commands in your terminal or command prompt:
For Windows:
```
IF NOT EXIST "%USERPROFILE%\.ipfs" MOVE "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\brave_ipfs" "%USERPROFILE%\.ipfs"
```
For macOS:
```
test ! -d ~/.ipfs && mv ~/Library/Application\ Support/BraveSoftware/Brave-Browser/brave_ipfs ~/.ipfs
```
Linux:
```
test ! -d ~/.ipfs && mv ~/.config/BraveSoftware/Brave-Browser/brave_ipfs ~/.ipfs
```
## Starting IPFS Desktop with Migrated IPFS Repository
Once move is completed, you can confirm it was successful if `.ipfs/config` exists in your home directory, and includes `PeerID` of your Brave node.
If `.ipfs/config` exists, you can now start IPFS Desktop. If everything went as expected, your IPFS node should start and run without Brave.
## Optional: Adjusting Configuration
Brave-integrated IPFS node had some drawbacks. The access to WebUI was hidden behind `brave://ipfs-internal`. DNSLink detection was based on HTTP header rather than DNS TXT lookup. Running IPFS node required the Brave browser to be open for content and IPNS announcements to function, and in early days did not even start `ipfs daemon` before `ipfs://` was used for the first time, leading to content from local repository not being provided to IPFS Mainnet peers. Repository cache was artificaially limited to 1GiB in size, and evicted along with browser cache, degrading the utility of peers cohosting casually browsed data.
Switching to IPFS Desktop+Companion solves most of these shortcomings, however you may need to adjust some settings to get full benefit of a standalone IPFS node.
### Updating Cache Size
[`Datastore.StorageMax`](https://github.com/ipfs/kubo/blob/master/docs/config.md#datastorestoragemax) controls how much space is allocated to data that is not pinned, such as visited IPFS websites, or other content you've viewed but do not want to pin forever. Having a bigger cache improves the data availability on the network, making websites more resilient.
To increase IPFS block cache size ([`Datastore.StorageMax`](https://github.com/ipfs/kubo/blob/master/docs/config.md#datastorestoragemax)) from 1GB to at least 100GB (the current default in Kubo):
```
$ ipfs config Datastore.StorageMax
1GB
$ ipfs config Datastore.StorageMax 100GB ~
```
### Updating RPC URL in IPFS Companion
Brave used custom ports: `45001` for RPC and `48080` for Gateway.
If IPFS Companion browser extension does not detect your node after migrating repository from Brave, you need to update RPC and Gateway URLs in Companion preferences.
- Change the **Kubo RPC URL** from `http://127.0.0.1:5001` to `http://127.0.0.1:45001`
- Change the **Local Gateway** from `http://127.0.0.1:8080` to `http://127.0.0.1:48080`
Alternative is to update `.ipfs/config` and replace all occurences of `45001` with `5001` and `48080` with `8080`. Make sure you do not have anything listening on these ports before you make the change.
## Conclusion
Congratulations! You've successfully migrated your IPFS data from Brave to IPFS Desktop.
If you encountered any challenges during the migration process or need further assistance, please don't hesitate to leave a comment in the thread below. The community is here to help, and your feedback can also assist others who might be going through the same process.
## FAQ
### Is it possible to move `brave_ipfs` to a different location than `.ipfs`?
Yes, but you need to set the `IPFS_PATH` environment variable before running IPFS Desktop to point at the new location.
See [How does IPFS Desktop select the IPFS repo location?](https://github.com/ipfs/ipfs-desktop/?tab=readme-ov-file#how-does-ipfs-desktop-select-the-ipfs-repo-location)
### Where can I find FAQ/Troubleshooting for IPFS Desktop?
See [github.com/ipfs/ipfs-desktop/#faq--troubleshooting](https://github.com/ipfs/ipfs-desktop/?tab=readme-ov-file#faq--troubleshooting)
### Can Kubo be used instead?
Yes, advanced users who are comfortable with command-line can use [Kubo](https://docs.ipfs.tech/install/command-line/) instead of IPFS Desktop, and run it against a custom `IPFS_PATH` to run a headless daemon, or perform selective manual migration via CLI.
### How to export my Files (MFS) with Kubo CLI?
To export contents of MFS to a CAR, run the following commands:
```
$ export IPFS_PATH=/path/to/brave_ipfs
$ export MFS_ROOT="$(ipfs files stat / | head -1)"
$ ipfs dag export $MFS_ROOT > mfs-backup.car
```
Then, it can be imported on another node and added to MFS there:
```
$ export IPFS_PATH=/path/to/some/other/.ipfs
$ ipfs dag import ./mfs-backup.car
$ ipfs files cp /ipfs/$MFS_ROOT /brave_mfs_backup
$ ipfs pin rm $MFS_ROOT
```
Note: low-level pin (created by `dag import`) can be removed (`pin rm`) after import because presence in MFS is enough to protect data from garbage-collection.
### How to manually migrate my IPNS names with Kubo CLI?
To export IPNS keys, and re-publish with them, see `ipfs key --help` and `ipfs name --help`.
### How to fix `Error: ipfs repo needs migration, please run migration tool.` ?
IPFS Desktop should run migrations the first time you start, but if you use Kubo CLI
you may need to run `ipfs daemon --migrate=true` once, to upgrade to latest version.

View File

@@ -8,6 +8,7 @@ permalink: brave-new-wallet
translationKey: ''
header_image: "/ipfs-blog-brave-2021-07-23.jpg"
tags:
- brave
- browsers
- API
@@ -72,4 +73,4 @@ Introducing (a sneak peek of) the Brave Wallet. The Brave Wallet will launch wit
**NFT Support.** Users can view their complete NFT collections directly in the wallet.
Keep an eye out for more updates about the Brave Wallet, coming to the Brave browser this year!
Keep an eye out for more updates about the Brave Wallet, coming to the Brave browser this year!

145
src/_blog/bybit-hack.md Normal file
View File

@@ -0,0 +1,145 @@
---
date: 2025-02-28
permalink: /2025-could-ipfs-prevent-bybit-hack/
title: 'Could IPFS have prevented the Bybit hack?'
description: 'The Bybit hack revealed several security failures, this post examines whether IPFS could have helped prevent the hack and practical solutions for dapp developers.'
author: Daniel Norman, Marcin Rataj
header_image: /2022-ipfs-gateways-1.png
tags:
- ipfs
- dapps
- security
---
## The Bybit Hack and IPFS
Bybit's [recent hack](https://www.reuters.com/technology/cybersecurity/cryptos-biggest-hacks-heists-after-15-billion-theft-bybit-2025-02-24/), which resulted in the loss of $1.4 billion, is a reminder of the importance of verification for frontends, especially dapp frontends in the Web3 ecosystem.
Based on what we know at the time of writing, IPFS, through local verification, could have served as a preventive line of defense in this sophisticated hack, potentially preventing it altogether.
In this blog post, we will recap what we know about the hack and share our perspective IPFS' role. diving into some of the technical efforts we've been spearheading at [Interplanetary Shipyard](https://ipshipyard.com/) to improve the health of the ecosystem.
If you are a dapp developer, you can skip the final section where we provide concrete recommendations with links to tooling.
## So how did the hack happen?
The TL;DR is that hackers managed to gain access to the AWS S3 bucket that hosted the Safe frontend served from `app.safe.global` and uploaded a malicious version of the frontend days before the hack. The frontend specifically targeted the Bybit cold wallet, causing owners of the multisig to sign a malicious transaction while obscuring the malicious transaction in the frontend.
It's not exactly clear how the hackers managed to gain access to the AWS S3 bucket. Some reports suggest that one of the developers' credentials was compromised through social engineering.
![conclusions about the Bybit hack](../assets/bybit-hack/conclusions.jpeg)
> [Source](https://x.com/benbybit/status/1894768736084885929)
## Security is layered
Security in software systems is approached in layers, often referred to as ["defense in depth."](<https://en.wikipedia.org/wiki/Defense_in_depth_(computing)>) This strategy involves implementing multiple security measures rather than relying on a single protective mechanism. If one layer fails, additional layers provide backup protection. The modern web is a complex ecosystem and as the stakes increase considering the sums of money at play, so does the need for better security measures.
In the context of this hack, we've identified three failures that made the hack possible:
1. The Safe frontend was unverified (trust was based on _belief_ DNS, TLS PKI and HTTP server are returning valid data)
2. The Safe multisig owners signed a malicious transaction
3. There were no additional approval layers in the Safe smart contract to prevent the malicious transaction from going through.
Since IPFS is mainly concerned with the first point (ability to verify data by means of [content-addressing](https://docs.ipfs.tech/concepts/content-addressing/)), we'll focus on that. The other two points bring up broader ecosystem needs like clear signing (rather than the blind signing often seen across smart contract wallets), improved UX that strengthens security rather than working against it, and more effective tools for verifying transactions.
The Ethereum community responded quickly, addressing the second point and released [multiple](https://safeutils.openzeppelin.com/) [tools](https://koeppelmann.github.io/CirclesTools/SafeViewer.html) and [documentation](https://help.safe.global/en/articles/276344-how-to-verify-safe-wallet-transactions-on-a-hardware-wallet) to help users verify transactions before signing them.
![Warning users to verify transactions before signing](../assets/bybit-hack/safe-wallet-warning.png)
## IPFS and frontend verification
The IPFS project has long advocated for wider adoption of client verification. Over a year ago, we published a [blog post](https://blog.ipfs.tech/dapps-ipfs/) discussing the importance of client verification and how IPFS can help.
> End-to-end integrity: as long as a user of your Dapp has the CID you shared, they can be sure they are running the exact code that you published by verifying locally. Local verification is crucial since Dapps interact with a blockchain **and malicious code can lead to loss of user funds**. Integrity is adjacent to trustlessness — because verification eliminates the need to trust the source of data.
> From [_The State of Dapps on IPFS: Trust vs. Verification (2024)_](https://blog.ipfs.tech/dapps-ipfs/)
End-to-end integrity through cryptographic hash verification is not new to many of us in the DWeb, Web3 and IPFS ecosystems.
In fact, we feel somewhat vindicated seeing the Gnosis founder share the CID of an open-source fork of the Safe frontend called [Eternal Safe](https://github.com/eternalsafe/wallet) shortly after the hack, while the Safe team conducted a forensic review of their services and frontend:
![Gnosis founder sharing the CID of the open-source fork of the Safe frontend](../assets/bybit-hack/eternal-tweet.png)
> [Source](https://x.com/koeppelmann/status/1893274676756881852)
### Native content addressing on the web
One of the longest standing goals we've had for the IPFS project is to make client-side verification integrated into browsers, making CIDs first-class citizens. In an ideal world, you should be able to use CIDs in browsers using `ipfs://` without necessrily installing a "full" IPFS node that runs as a separate process on your computer.
To this end, we've launched multiple projects with varying degrees of success. The main challenge we run into time and time again is browser contraints and the lack of extensibility APIs that would allow shifting trust away from a specific origin from which content is served to a self-certifying identifier like a CID, allowing content to be verified locally, regardless of the source.
Browser extensions distributed through extension stores are harder to compromise in comparison to HTTP servers, because rollout is staged rather than instant, and vetted code assets can be bundled within the extension itself. Moreover, publishing mandates signing by the author, ensuring that users are installing the extension from a trusted source. We are investigating how we could [package the Service Worker IPFS gateway as a browser extension](https://github.com/ipfs/in-web-browsers/issues/212) to improve the user experience.
The self-certifying approach with CIDs is in tension with the [Same-origin policy](https://developer.mozilla.org/en-US/docs/Web/Security#same-origin_policy_and_cors): the fundamental security mechanism of the web whereby trust is anchored to an origin using DNS and PKI. Yet, given that [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) allows for hash verification of subresources, we're hopeful that we can work with standard bodies and browser vendors to expand on this foundation and provide mechanisms to verify top-level resources like HTML, JS, CSS, etc.
Having said that, we have some concrete recommendations for dapp developers that can be implemented today, while we advance efforts to make CIDs first-class citizens in browsers.
## IPFS for dapp developers
As a dapp developer, there are three key things you need understand and streamline into your development workflows today:
- How to deploy your frontend to IPFS.
- How to safely signal release CIDs to users.
- How users can and safely retrieve the frontend and be confident it's the same as the one you published.
Let's take a quick look at the state of the art for each of these.
### Deploying frontend to IPFS
To make deployments to IPFS as seamless as possible, we recently released [ipfs-deploy-action](https://github.com/ipfs/ipfs-deploy-action), a GitHub action that makes it easy to deploy your frontend (or any other static assets for that matter) to IPFS as part of CI/CD pipelines. It encapsulates best practices we've established over the years, like local CID generation and pinning with [CAR files](https://docs.ipfs.tech/concepts/glossary/#car).
![ipfs-deploy-action setting the CID in the commit status](../assets/bybit-hack/cid-commit-status.png)
The action is built with open tooling makes no assumption on your build process, so it works with any static site generator. Moreover, it sets the status of the commit with the CID allowing for more visibility and auditability of your deployments.
<br />
<a href="https://github.com/ipfs/ipfs-deploy-action" class="cta-button">
Try ipfs-deploy-action
</a>
### Signaling the CID to users
Once you've deployed your frontend to IPFS, you need to signal the CID to users. This can be done in a few ways:
- Publishing the CID in the GitHub release notes, like [Eternal Safe](https://github.com/eternalsafe/wallet/releases/tag/v1) and [Uniswap](https://github.com/Uniswap/interface/releases/).
- Publishing the CID onchain with [ENS](https://ens.domains) or [IPCM](https://github.com/PinataCloud/ipcm)
- Regularly publishing cryptographically-signed [IPNS](https://docs.ipfs.tech/concepts/ipns/) records
- Leveraging [DNSLink](https://docs.ipfs.tech/concepts/dnslink/) with hardened resolver ([DNSSEC](https://www.cloudflare.com/learning/dns/dnssec/how-dnssec-works/)-only and/or non-ICANN resolver such as [this one for ENS](https://github.com/ethlimo/limo-web3-dns)).
Each of these has different security properties and tradeoffs, some of which have been evaluated in the [Dapps on IPFS](https://blog.ipfs.tech/dapps-ipfs/) blog post.
The quickest way to get up and running is with GitHub, which provides strong security and auditability. At a minimum, reuse GitHub Releases to publish both the original source code and CID. This provides your users with a means to load frontend in a verifiable way.
### Retrieving the frontend
With the CID in hand, users have a few ways to retrieve the frontend:
- Local IPFS node like [IPFS Desktop](https://docs.ipfs.tech/install/ipfs-desktop/) together with [IPFS Companion browser extension](https://docs.ipfs.tech/install/ipfs-companion/) provide `ipfs://cid` URI support with the highest level of security, including local CID verification and caching. Great solution for desktops, but doesn't work on mobile.
- In-browser verification with the [Service Worker Gateway](https://github.com/ipfs/service-worker-gateway#readme) is getting better, however, initial bootstrapping of the worker is still tied to an HTTP server which could serve malicious client code if successfully exploited. We are currently investigating how we could package the Service Worker IPFS gateway as a browser extension to close this gap and improve the user experience.
- Public Good HTTP Gateways, e.g. `ipfs.io`, `dweb.link`, and `eth.limo`, return deserialized assets which can't verified by end users. As the [IPFS Principles](https://specs.ipfs.tech/architecture/principles/#verification-matters) document states, **verification matters**, if you are not verifying, it's not IPFS. This is a supply chain equivalent of "not your keys, not your cheese".
<br />
<a href="https://docs.ipfs.tech/install/ipfs-desktop/#install-instructions" class="cta-button">
Download IPFS Desktop
</a>
<br/><br/>
<a href="https://docs.ipfs.tech/install/ipfs-companion/" class="cta-button">
Install IPFS Companion
</a>
## Collaboration Proposal: Let's work together
[Interplanetary Shipyard](https://ipshipyard.com/), is an independent collective of people maintaining many of the most popular implementations in the IPFS and libp2p ecosystem.
If you are looking to improve the security of your dapp, we'd love to hear from you at `contact [at] ipshipyard.com`.
- Curious to explore browser extensions for your dapp that enforce frontend security via the Service Worker Gateway and safelisted release CIDs?
- Want to sponsor browser improvements to remove dependency on DNS and PKI as trust anchor?
[Let's chat](https://ipshipyard.com/contact-us)!
## Final words
Striking the right balance between security and usability is hard. If there's one takeaway from this post, it's that verification is important at multiple steps of users' interaction with blockchains.
IPFS is not a silver bullet, but there's a good chance that if the owners of the Bybit Safe multisig loaded the frontend from a local IPFS node, this could have been prevented.

View File

@@ -4,6 +4,7 @@ permalink: '/2021-01-21-how-we-put-ipfs-in-brave/'
translationKey: ''
tags:
- browsers
- brave
header_image: '/2021-01-21-how-we-put-ipfs-in-brave.jpg'
title: How we put IPFS in Brave
description:

View File

@@ -11,6 +11,9 @@ tags:
- CID
---
**Update (2024Q1): This is an old blogpost. [Reframe was deprecated in 2022](https://github.com/ipfs/kubo/issues/9479) and ecosystem replaced it with modern [Delegated Routing V1 HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) (`/routing/v1`) which is also [supported by Kubo](https://github.com/ipfs/kubo/blob/master/docs/delegated-routing.md) and [Someguy](https://github.com/ipfs-shipyard/someguy).**
[kubo v0.14.0 added support](https://github.com/ipfs/kubo/releases/tag/v0.14.0#delegated-routing) for the [Reframe protocol](https://github.com/ipfs/specs/tree/main/reframe#readme), which enables users to configure how their kubo node discovers content, peers, and handles IPNS records by just adding an HTTP endpoint to their config file. This means if you have a new content routing system youd like to try out next to, or instead of, the IPFS Public DHT its now simple to do so. Similarly, Reframe starts enabling applications like public IPFS HTTP Gateways to decouple their DHT nodes from their content serving nodes so that they can be scaled and load-balanced independently.
You can see more information and a demo utilizing Reframe in this [presentation](https://www.youtube.com/watch?v=lpphD7OJ28U&list=PLuhRWgmPaHtSF3oIY3TzrM-Nq5IU_RTXb) from IPFS Thing 2022.
@@ -165,4 +168,6 @@ For example, support for querying the endpoint at [cid.contact](http://cid.conta
See [https://github.com/ipfs/kubo/blob/master/docs/config.md#routing](https://github.com/ipfs/kubo/blob/master/docs/config.md#routing "https://github.com/ipfs/kubo/blob/master/docs/config.md#routing") for more details.
Note: further work to homogenize routing configuration across the multiple routing systems used in Kubo including the IPFS Public DHT and various Reframe endpoints is happening [here](https://github.com/ipfs/kubo/issues/9150).
Note: further work to homogenize routing configuration across the multiple routing systems used in Kubo including the IPFS Public DHT and various Reframe endpoints is happening [here](https://github.com/ipfs/kubo/issues/9150).
**Update (2024Q1):** [Reframe was deprecated in 2022](https://github.com/ipfs/kubo/issues/9479) and ecosystem replaced it with modern [Delegated Routing V1 HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) (`/routing/v1`) which is also [supported by Kubo](https://github.com/ipfs/kubo/blob/master/docs/delegated-routing.md) and [Someguy](https://github.com/ipfs-shipyard/someguy).

View File

@@ -0,0 +1,49 @@
---
title: Announcing the IPFS Camp 2024 Track List
description: "To give you a taste of what kinds of topics IPFS Camp will cover this year, were excited to share the 2024 track list!"
date: 2024-04-11
permalink: "/ipfs-camp-2024-track-list"
header_image: "/ipfs-camp-2024.png"
tags:
- camp
---
IPFS Camp 2024 is back this summer! It will take place on July 11-13 in Brussels, Belgium alongside EthCC and today were announcing a track list so hip youll be grooving just reading the headlines. Three days workshops, discussion circles, hacking time, and more — all focused on connecting builders and users to make the internet more sustainable, democratic, and secure.
Excited? Dont just [register today](https://2024.ipfs.camp/), also go [submit a talk](https://airtable.com/appM094R1Ma5HG757/shrWn6XaRgUkYWPm3)! Wed love to hear from you! (Yes, *you*!)
<a href="https://2024.ipfs.camp/" class="cta-button">Register Today</a>
## 2024 Track List
### Opening Keynotes
A warm and wonderful kickoff to IPFS Camp with keynote speakers, fireside chats, and a smörgåsbord of community talks and perspectives on the present and future of IPFS.
### Decentralized Apps and Publishing
Explore the latest tools, frameworks, and best practices for building and deploying dApps that are resilient, fully decentralized, hard to phish, and respect peoples privacy.
### Public Records and Human Rights
Discover how IPFS is being used to protect public records, to authenticate pictures online, and support human rights initiatives worldwide.
### AI in 2024: Ethics, Ownership, and Data
In this track, we'll explore urgent topics of attribution, ethics, and payment in the age of AI-generated art, music, and text. Then, well dive into how content-addressed data forges new opportunities for creators and developers.
### Climate Resilience and IPFS
In the face of the growing climate crisis, reliable and transparent environmental data is more crucial than ever. This track explores real-world applications of IPFS in environmental monitoring, climate modeling, and disaster response.
### Syncing Bytes at Scale
Dive into the latest techniques and tools for efficiently syncing bytes at scale with IPFS. Learn how to optimize data transfer, ensure data integrity, and reduce bandwidth costs. Whether you're working with scientific, media, or enterprise data — or any kind of large-scale data whatsoever to be honest, its all about the bytes — this track has something for you.
### Libp2p Day
Join us for a full day dedicated to libp2p, the modular networking stack that powers IPFS, Ethereum, and other decentralized protocols. Learn about the latest developments in libp2p, including new transports, improved NAT traversal, and enhanced security features. Hear from the core developers and researchers behind libp2p, and discover how you can use this powerful library to build your own networks and applications.
### IPLD, Databases, and the People Who Love Them
Meet the passionate developers and researchers pushing the boundaries of what's possible with IPLD. Learn how experts use IPLD to build more efficient, interoperable databases and data structures, and join the efforts to push IPLD forward.
### Startup Showcase
Lightning talks from projects and startups using IPFS to solve real-world problems, plus roundtables on how to solve shared challenges.
<a href="https://2024.ipfs.camp/" class="cta-button">Register Today</a>
[Submit a talk](https://airtable.com/appM094R1Ma5HG757/shrWn6XaRgUkYWPm3)

71
src/_blog/ipfs-check.md Normal file
View File

@@ -0,0 +1,71 @@
---
date: 2024-10-07
permalink: /ipfs-check/
title: 'Improved Debugging with IPFS Check'
description: 'IPFS Check is a debugging tool for IPFS Mainnet. It helps you check if data is routable and retrievable by CID on IPFS Mainnet.'
author: Daniel Norman
header_image: /ipfs-check-cover.jpg
tags:
- ipfs
- cid
- debugging
- ipni
- dht
---
## 🎉 Improved retrievability debugging with IPFS Check
The [Shipyard team](https://ipshipyard.com/) is thrilled to share an overhauled version of [IPFS Check](https://check.ipfs.network), a debugging tool for the [IPFS Mainnet](https://docs.ipfs.tech/concepts/glossary/#mainnet) public network. This new version is both simpler to use and more powerful.
Try it out at [check.ipfs.network](https://check.ipfs.network/?cid=bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi)
@[youtube](XeNOQDOrdC0)
## 🧰 Debugging retrievability on IPFS can be tricky
[Content Identifiers (CIDs)]((https://docs.ipfs.tech/concepts/glossary/#cid)), which lie at the heart of IPFS, free you from reliance on any single data provider. This is pretty magical, because as long as there is at least one provider for that data, you can always retrieve it via CID without needing to know the provider in advance. As a result, data retrieval on IPFS remains resilient even if individual providers become unavailable.
However, decoupling data from a single provider comes with a tradeoff: failure modes are more nuanced than in the client-server model.
In IPFS, when you try to fetch a CID, some providers may be online, while others may be offline, use other non-compatible network protocols, be slow, overloaded, or behind NAT and require hole punching to be reached.
Moreover, with the advent of [Delegated Routing](https://docs.ipfs.tech/concepts/how-ipfs-works/#how-content-routing-works-in-ipfs) and the [Network Indexer](https://docs.ipfs.tech/concepts/ipni/), CIDs may be routed by either the DHT or the Network Indexer, or both.
As a result, the likelihood of encountering an error when retrieving data is dependent on several dynamic factors:
1. Provider availability, which can constantly change
2. Network conditions of both client and providers
3. Successful announcement of CIDs to the DHT or Network Indexer.
![diagram illustrating multiple providers for cids](../assets/ipfs-check-network.png)
As a user looking to retrieve data by CID, you may experience different things, depending on the CID you are looking for, and the network conditions when you try to retrieve it.
Up until now, there was no easy way to get a detailed overview of whether a given CID is retrievable, and if not, why.
## 🔍 IPFS Check helps you debug retrievability of data
[IPFS Check](https://check.ipfs.network/) fills a gap for users and developers working with the IPFS Mainnet public network: the ability to easily check if data is routable and retrievable by CID.
IPFS Check provides insights into accessibility and routing for any data on the IPFS Mainnet public network. It is a web app and doesn't require any setup or installation.
You can use IPFS Check to:
1. Verify if data is routable and retrievable by CID on IPFS Mainnet (and if not, get a detailed explanation of why for each provider).
2. View the multiaddresses and network transports used to connect to providers.
3. Determine if NAT hole punching was necessary.
It's especially useful to get an _outside perspective_ of your IPFS node's network setup, and whether it is correctly configured.
## Recent updates to IPFS Check
As part of the recent overhaul, we've made several improvements to IPFS Check:
- **Support for CID-only checks**: you can now check whether a CID is available from _any_ provider, without needing to pass a specific provider's multiaddr.
- **IPNI support**: By default, IPFS Check will search for providers both in the IPNI and the DHT.
- **NAT traversal**: you can now in the results whether retrieval requires NAT traversal (if there are two successful sonnection multiaddrs and one of them contains `p2p-circuit`).
- **Network Protocol**: you can now see in the results which specific multiaddr was used for the connection, which tells you which network protocol was used, e.g. QUIC.
Give it a try at [check.ipfs.network](https://check.ipfs.network/). We hope you find it useful!
If you have any questions or feedback, open an issue or a discussion in the [GitHub repo](https://github.com/ipfs/ipfs-check/).

View File

@@ -3,6 +3,7 @@ date: 2021-01-19
permalink: '/2021-01-19-ipfs-in-brave/'
translationKey: ''
tags:
- brave
- browsers
header_image: '/2021-01-19-ipfs-in-brave.png'
title: IPFS in Brave - Native Access to the Distributed Web

View File

@@ -4,6 +4,15 @@ type: News coverage
sitemap:
exclude: true
data:
- title: Cloudflares public IPFS gateways and supporting Interplanetary Shipyard
date: 2024-05-14
publish_date:
path: https://blog.cloudflare.com/cloudflares-public-ipfs-gateways-and-supporting-interplanetary-shipyard
tags:
- Cloudflare
- IPFS
- gateway
- IPShipyard
- title: Filecoin Foundation Successfully Deploys IPFS in Space
date: 2024-01-16
publish_date:

View File

@@ -0,0 +1,73 @@
---
title: IPFS News Issue 202
description: Featuring the announcement of IPFS Camp 2024 and pre-reregistration for this year's exciting event!
date: 2024-02-28
permalink: "/newsletter-202"
header_image: "/ipfsnews.png"
tags:
- newsletter
---
## **Pre-register for IPFS Camp 2024 🔭**
Drumroll please... 🥁 IPFS Camp 2024 is coming soon! This event is for those who want to bend the arc of the Internet to be more open, efficient, and secure.
🗓️ July 11-13, 2024
📍 Brussels, Belgium
This will be the most exciting IPFS event yet! Connecting builders and users, organized by thematic tracks, and inspired by the in-depth conversations and unbounded energy of previous IPFS gatherings, it will be an event to remember. IPFS Camp 2024 tracks include: Decentralized Apps and Publishing, Public Records and Human Rights, CIDs in the Age of Generative AI, Syncing Bytes at Scale, Libp2p Day... & more!
<a href="https://lu.ma/preregcamp24" class="cta-button">Pre-register to save the date</a>
## **Brand New on IPFS ✨**
[Interplanetary Shipyard needs your help raising $3 million ](https://ipshipyard.gitwallet.co/)
- The core maintainers of several key IPFS implementations now operate as a separate team in the Protocol Labs network known has Shipyard and they need your help! They're raising $3M in community contributions to sustain their work as technical stewards in 2024. [Learn more and contribute here!](https://ipshipyard.gitwallet.co/)
[Strategy for transitioning IPFS chat away from the Filecoin Slack](https://discuss.ipfs.tech/t/strategy-for-transitioning-ipfs-chat-away-from-filecoin-slack/17532)
- With the IPFS project continuing to mature, there is an increasing need for chat to begin shifting away from Filecoin Slack to its own communication platforms in order to avoid confusion and brand overlap. [Check out the proposal on the forum!](https://discuss.ipfs.tech/t/strategy-for-transitioning-ipfs-chat-away-from-filecoin-slack/17532)
[New Public Utilities docs page](https://docs.ipfs.tech/concepts/public-utilities/)
- These utilities make it easier to retrieve data from the IPFS network in resource-constrained environments such as browsers and low-powered devices. [Check out the new page here!](https://docs.ipfs.tech/concepts/public-utilities/)
[New Release: Kubo v0.27.0](https://github.com/ipfs/kubo/blob/master/docs/changelogs/v0.27.md)
- Gateway: support for /api/v0 is deprecated
- IPNS resolver cache's TTL can now be configured
- RPC client: deprecated DHT API, added Routing API
- Deprecated DHT commands removed from /api/v0/dht
- Repository migrations are now trustless
[New Release: Boxo v0.18.0](https://github.com/ipfs/boxo/releases/tag/v0.18.0)
[Popular on the Forums](https://discuss.ipfs.tech/top?period=monthly)
- General: [Setup advice - use case](https://discuss.ipfs.tech/t/setup-advice-use-case/17535)
- General: [Updates on advancing IPFS project governance](https://discuss.ipfs.tech/t/updates-on-advancing-ipfs-project-governance/17522)
- Comms WG: [Strategy for transitioning IPFS chat away from Filecoin Slack](https://discuss.ipfs.tech/t/strategy-for-transitioning-ipfs-chat-away-from-filecoin-slack/17532)
- Protocol: [IPNS discovery using DIDs](https://discuss.ipfs.tech/t/ipns-discovery-using-dids/17539)
[ProbeLab Network Weekly Reports](https://github.com/plprobelab/network-measurements/tree/master/reports/2023)
## **Around the Ecosystem 🌎**
[Lighthouse announces Desktop app](https://twitter.com/LighthouseWeb3/status/1752002422523019396?s=20)
- Lighthouse offers perpetual storage on Filecoin and IPFS. Initially a developer tool with SDKs, Lighthouse is now available to any desktop user through their new app. [Learn more and register for the closed beta!](https://twitter.com/LighthouseWeb3/status/1752002422523019396?s=20)
[4 new demos and tutorials from Agregore](https://agregore.mauve.moe/blog/2023/12/demos-and-tutorials-second-round#webapps-milestone-3)
- See how to build a basic chat app with the pubsub:// protocol that is part of IPFS, upload full directories, and build a drag-and-drop uploader. [Check out the latest demos here!](https://agregore.mauve.moe/blog/2023/12/demos-and-tutorials-second-round#webapps-milestone-3)
[DScan: Own Your Identity, Own your Data](https://chromewebstore.google.com/detail/dscan-own-your-identity-o/idpfgkgogjjgklefnkjdpghkifbjenap)
- Check out this Chrome extension that uploads content to IPFS and generates decentralized QR codes for easy file sharing. Dscan uses DIDs and UCAN for robust, decentralized user permissions. [Download the extension here!](https://chromewebstore.google.com/detail/dscan-own-your-identity-o/idpfgkgogjjgklefnkjdpghkifbjenap)
## **Have something you want featured? 📥**
If you have something exciting or important that you think the IPFS community should know about, then you can [submit this form](https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv) to have it be considered for inclusion in the IPFS newsletter.
<a href="https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv" class="cta-button">Submit form</a>

View File

@@ -0,0 +1,55 @@
---
title: IPFS News Issue 203
description: Featuring more news about IPFS Camp 2024! 🏕️
date: 2024-03-28
permalink: "/newsletter-203"
header_image: "/ipfsnews.png"
tags:
- newsletter
---
## **Registration for IPFS Camp 2024 is officially open!**
[Register soon and take advantage of a 40% off early bird discount.](https://2024.ipfs.camp/)
IPFS Camp is for those who want to bend the arc of the Internet to be more open, efficient, and secure. This will be the most exciting IPFS event yet! Connecting builders and users, organized by thematic tracks, and inspired by the in-depth conversations and unbounded energy of previous IPFS gatherings, it will be an event to remember.
- 🗓️ July 11-13, 2024
- 📍 Brussels, Belgium
<a href="https://2024.ipfs.camp/" class="cta-button">Register Today</a>
## **Want to Speak at IPFS Camp 2024?**
Were looking for talks long and short, as well as workshops and other creative formats, for numerous content tracks. Submit your proposal here: 
<a href="https://airtable.com/appM094R1Ma5HG757/shrWn6XaRgUkYWPm3?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-899mMASAieFLwGglezvFYpc4w7Q8cU2--Dq-xjqOnU9pUEcjTXKe3f8ogOVl9RHWQ-vSMp" class="cta-button">Submit a talk</a>
## **Brand New on IPFS ✨**
[New Release: Kubo v0.28.0](https://github.com/ipfs/kubo/blob/master/docs/changelogs/v0.28.md)
- RPC client: removed deprecated DHT API
- Gateway: /api/v0 is removed
- Removed deprecated Object API commands
[Popular on the Forums](https://discuss.ipfs.tech/top?period=monthly)
- Help: [Unable to resolve IPNS name via remote IPFS nodes or public gateways (used to work fine)](https://discuss.ipfs.tech/t/unable-to-resolve-ipns-name-via-remote-ipfs-nodes-or-public-gateways-used-to-work-fine/17658)
- Help: [How to upload mutiple file same in a folder](https://discuss.ipfs.tech/t/how-to-upload-mutiple-file-same-in-a-folder/17699/6)
- Kubo: [Kubo (go-ipfs) closes db randomly](https://discuss.ipfs.tech/t/kubo-go-ipfs-closes-db-randomly/17683)
- Ecosystem: [IPFS governance: launching a provisional Steering Committee](https://discuss.ipfs.tech/t/ipfs-governance-launching-a-provisional-steering-committee/17712/2)
- General: [How was everyones ETHDenver trip?](https://discuss.ipfs.tech/t/how-was-everyones-ethdenver-trip/17662/4)
[ProbeLab Network Weekly Reports](https://github.com/plprobelab/network-measurements/tree/master/reports/2023)
## **Around the Ecosystem 🌎**
[Introducing the Filebase Content Delivery Network](https://filebase.com/blog/introducing-the-filebase-content-delivery-network/)
- "Spanning three continents, the Filebase CDN features multiple Points of Presence (PoPs) in key locations across North America, Europe, and Asia. Leveraging geolocation-based load balancing, the Filebase CDN automatically directs traffic to the nearest data center, minimizing latency and turbocharging content delivery speed—whether over HTTPS or Bitswap. This global network ensures that no matter where users are located, they can access IPFS content quickly and reliably." [Learn more about Filebase's CDN here!](https://filebase.com/blog/introducing-the-filebase-content-delivery-network/)
## **Have something you want featured? 📥**
If you have something exciting or important that you think the IPFS community should know about, then you can [submit this form](https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv) to have it be considered for inclusion in the IPFS newsletter.
<a href="https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv" class="cta-button">Submit form</a>

View File

@@ -0,0 +1,76 @@
---
title: IPFS News Issue 204
description: Welcome to IPFS News 204! Featuring @helia/verified-fetch and the IPFS Camp 2024 track list.
date: 2024-04-30
permalink: "/newsletter-204"
header_image: "/ipfsnews.png"
tags:
- newsletter
---
## **Register for IPFS Camp 2024**
Register soon and take advantage of an 8% off early bird discount.
IPFS Camp is for those who want to bend the arc of the Internet to be more open, efficient, and secure. This will be the most exciting IPFS event yet! Connecting builders and users, organized by thematic tracks, and inspired by the in-depth conversations and unbounded energy of previous IPFS gatherings, it will be an event to remember.
- 🗓️ July 11-13, 2024
- 📍 Brussels, Belgium
<a href="https://2024.ipfs.camp/" class="cta-button">Register Today</a>
## **Brand New on IPFS ✨**
[Announcing @helia/verified-fetch](https://blog.ipfs.tech/verified-fetch/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- The fetch-like, Web native abstraction for retrieving content from IPFS-compatible networks has been released. [Read the blog post to learn more!](https://blog.ipfs.tech/verified-fetch/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Announcing the IPFS Camp 2024 Track List](https://blog.ipfs.tech/ipfs-camp-2024-track-list/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- To give you a taste of what kinds of topics IPFS Camp will cover this year, were excited to share the 2024 track list. If any of the tracks sparks your imagination or gives you an idea for something youd like to present, be sure to submit a proposal for a talk. Wed love to hear from you! [Check out the track list!](https://blog.ipfs.tech/ipfs-camp-2024-track-list/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Helia Survey](https://airtable.com/appgppDnTDtpyEFhI/pagizuBtddTY0QDEv/form?utm_content=290129180&utm_medium=social&utm_source=twitter&hss_channel=tw-3030006159&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- The Shipyard team leading the development of Helia is conducting a survey to learn about how Helia is used so that we can make it better. Your feedback will help us understand developer needs, challenges, as well as inform our priorities and shape Helias roadmap. [Fill out the survey!](https://airtable.com/appgppDnTDtpyEFhI/pagizuBtddTY0QDEv/form?utm_content=290129180&utm_medium=social&utm_source=twitter&hss_channel=tw-3030006159&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Kubo v0.28.0](https://github.com/ipfs/kubo/releases/tag/v0.28.0?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- LAN and Loopback IPs are not announced when not useful, Pin roots are now prioritized when announcing, Sunset deprecated RPCs and features.
[Rainbow v1](https://github.com/ipfs/rainbow/releases/tag/v1.0.0?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- Performant IPFS gateway based on boxo, also replaced Kubo as backend of public gateways ipfs.io, dweb.link, and trustless-gateway.link
[Iroh v0.14.0](https://iroh.computer/blog/iroh-0-14-0-dial-the-world?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- Dial by just a Node ID
- Faster relay handshakes
- Basic Author API
- Upgrade redb to v2.0
[Iroh v0.15.0](https://iroh.computer/blog/iroh-0-15-0-shut-me-down?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- Graceful Shutdown
- Integrated Downloader
- Expanded Support for dialing by only NodeID
- More binaries
- Breaking Changes
[Someguy v0.2](https://github.com/ipfs/someguy/releases/tag/v0.2.0?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Popular on the Forums](https://discuss.ipfs.tech/top?period=monthly&utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- [Local.storage - self hosted w3storage backend](https://discuss.ipfs.tech/t/local-storage-self-hosted-w3storage-backend/17857?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- [Next steps for the IPFS Community Calendar](https://discuss.ipfs.tech/t/next-steps-for-the-ipfs-community-calendar/17849/5?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- [Does ipfs takes more time to upload and download encrypted data?](https://discuss.ipfs.tech/t/does-ipfs-takes-more-time-to-upload-and-download-encrypted-data/17856?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- [Retrieve content using cid from ipfs cluster](https://discuss.ipfs.tech/t/retrieve-content-using-cid-from-ipfs-cluster/17818?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[ProbeLab Network Weekly Reports](https://github.com/plprobelab/network-measurements/tree/master/reports/2023)
## **Around the Ecosystem 🌎**
[IPFS & libp2p Devs Go Independent: Meet Interplanetary Shipyard](https://blog.ipfs.tech/shipyard-hello-world/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- Learn more about the new independent collective of people maintaining many of the most popular implementations in the IPFS and libp2p ecosystem. [Read the new blog post!](https://blog.ipfs.tech/shipyard-hello-world/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Fireproof Roadmap Update](https://fireproof.storage/posts/roadmap-update/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- The Fireproof team has shared an in-depth update on what they're up to and where they're going. [Check it out!](https://fireproof.storage/posts/roadmap-update/?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
[Celebrating Innovation and Community at NFT.Storage's Landmark Event](https://nft.storage/blog/celebrating-innovation-and-community-at-nft-storages-landmark-event?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
- Recap of NFT.Storage's groundbreaking event at MoMA PS1 during NFT.NYC, where they unveiled a new platform upgrade and launched the NFT.Storage DAO. This blog post explores their commitment to community-driven NFT preservation, highlights from the discussions on the future of arts and NFTs, and how you can join the DAO to contribute to this innovative journey. [Read the blog post!](https://nft.storage/blog/celebrating-innovation-and-community-at-nft-storages-landmark-event?utm_source=hs_email&utm_medium=email&_hsenc=p2ANqtz-_i0pGQB-qDyxAWRjj6mhoMbeL5Q_D5uOoBYG52XQ7Pr8fD8_wMbE_jy-ovyasZ5L4aYY3p)
## **Have something you want featured? 📥**
If you have something exciting or important that you think the IPFS community should know about, then you can [submit this form](https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv) to have it be considered for inclusion in the IPFS newsletter.
<a href="https://airtable.com/appjqlMYucNiOYHl7/shrfPrKe112FW3ucv" class="cta-button">Submit form</a>

View File

@@ -1,5 +1,88 @@
---
data:
- title: 'Announcing AutoTLS: Bridging IPFS and the Web'
date: "2025-02-17"
publish_date: null
path: https://blog.libp2p.io/autotls/
card_image: "/libp2p_WebTransport_Blog_Header.png"
tags:
- AutoTLS
- IPFS
- libp2p
- libp2p.direct
- Let's Encrypt
- TLS
- Interplanetary Shipyard
- title: 'Just released: Kubo 0.33.2!'
date: "2025-02-14"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.33.2
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.33.1!'
date: "2025-02-04"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.33.1
tags:
- go-ipfs
- kubo
- title: 'Just released: IPFS Desktop 0.41.0 with AutoTLS!'
date: "2025-01-31"
path: https://github.com/ipfs/ipfs-desktop/releases/tag/v0.41.0
tags:
- IPFS Desktop
- AutoTLS
- title: 'Just released: Kubo 0.33.0!'
date: "2025-01-29"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.33.0
tags:
- go-ipfs
- kubo
- AutoTLS
- title: 'Just released: Kubo 0.32.1!'
date: "2024-11-15"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.32.1
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.31.0!'
date: "2024-10-16"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.31.0
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.30.0!'
date: "2024-09-11"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.30.0
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.29.0!'
date: "2024-06-10"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.29.0
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.28.0!'
date: "2024-04-15"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.28.0
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.27.0!'
date: "2024-03-04"
publish_date: null
path: https://github.com/ipfs/kubo/releases/tag/v0.27.0
tags:
- go-ipfs
- kubo
- title: 'Just released: Kubo 0.26.0!'
date: "2024-01-22"
publish_date: null

394
src/_blog/shipyard-2024.md Normal file
View File

@@ -0,0 +1,394 @@
---
date: 2024-11-25
permalink: /2024-shipyard-improving-ipfs-on-the-web/
title: 'IPFS on the Web in 2024: Update From Interplanetary Shipyard'
description: 'Update from Interplanetary Shipyard on our efforts to make IPFS work on the Web.'
author: Daniel Norman
header_image: /ipfs-on-the-web-2024/cover.jpg
tags:
- ipfs
- cid
- 'web platform'
- browsers
- WebRTC
- WebTransport
- WebSockets
- AutoTLS
- Let's Encrypt
- Interplanetary Shipyard
---
## Update From Interplanetary Shipyard
Earlier this year, [we introduced Interplanetary Shipyard](https://blog.ipfs.tech/shipyard-hello-world/), as the evolution of the maintainers leading the open-source development of libp2p and the most popular IPFS implementations, tooling and infrastructure.
In our introduction, we shared our roadmap and vision, a key part of which is to make IPFS work on the web.
In this blog post, we'll share all the progress we've made since then and what we have planned for the future.
## IPFS on the Web
For as long as IPFS has existed, one of the key goals has been to make it possible to use IPFS on the web. That is, **resilient**, **decentralized**, and **verified** data retrieval on the Web.
But what does it mean for IPFS to work on the Web?
**Resilient**: Data is retrievable in a browser even if some providers go offline.
**Decentralized**: You can connect to other peers from a browser for content routing and retrieval while immune to censorship and chokepoints that disrupt the network.
**Verified**: You verify data locally, ensuring integrity without assuming trust (aka trustless).
Data refers to anything that can be addressed by a CID: files, directories, web apps/dapps, videos, etc.
While the Web platform has by far the widest reach, it's also the most challenging platform to make IPFS work on due to the inherent constraints of the platform and the discrepancies between browsers.
Gateways like `ipfs.io` are a double-edged sword, because they make IPFS content accessible to the web, but they also highlight the challenges of IPFS on the web. Initially conceived as a crutch to bootstrap the network until a more decentralized and resilient solution was in place, public gateways became entrenched as the default to access IPFS content on the web to the detriment of the principles of IPFS.
At [Interplanetary Shipyard](https://ipshipyard.com/), we've been tackling this challenge head on with a number of projects across the libp2p and IPFS stacks to make IPFS on the web a reality:
- [**Verified Fetch**](#verified-fetch)
- [**Service Worker Gateway**](#service-worker-gateway)
- [**New browser transports**](#browser-transports)
- [**AutoTLS with libp2p.direct**](#autotls-with-libp2p-direct)
- [**IPFS over HTTP**](#ipfs-over-http)
- [**Browser Developer Tools**](#browser-developer-tools)
- [**Delegated Routing HTTP API**](#delegated-routing-http-api)
- [**Bitswap improvements**](#bitswap-improvements)
- [**libp2p improvements**](#libp2p-improvements)
Let's take a look at each of these projects in more detail.
### Verified Fetch
[Verified Fetch](https://www.npmjs.com/package/@helia/verified-fetch) is a TypeScript library for verified retrieval of IPFS content we [released earlier this year](https://blog.ipfs.tech/verified-fetch/) and built on top of [Helia](https://github.com/ipfs/helia/). We designed it to make IPFS retrieval by CID as easy as the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) that most developers are already familiar with. We focused on getting a seamless developer experience with a simple API, while abstracting away all the complexities of IPFS: **content routing, transports, and verification**.
Verified Fetch works great for loading content-addressed static assets or sub-resources asynchronously as part of a web app or dapp, for example, images, videos, or JSON.
From a developer experience standpoint, Verified Fetch follows the following pattern:
- Take a CID as input
- Return a [`Response` object](https://developer.mozilla.org/en-US/docs/Web/API/Response)
This foundational API surface, while simple, enables a wide range of retrieval use-cases while abstracting away the complexities of data types, content routing, transports and verification. Moreover, returning a `Response` object allows for easy integration with the browser's caching mechanisms and use in [Service Workers](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API).
Verified Fetch is great for loading content-addressed static assets or "sub-resources" asynchronously, for example, images, videos and even IPLD encoded data.
<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="VwoWWGQ" data-pen-title="@helia/verified-fetch Direct Retrieval with Libp2p" data-preview="true" data-editable="true" data-user="2color" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
<span>See the Pen <a href="https://codepen.io/2color/pen/VwoWWGQ">
@helia/verified-fetch Direct Retrieval with Libp2p</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>
<br />
<a href="https://npmjs.com/package/@helia/verified-fetch" class="cta-button" target="_blank"> Install Verified Fetch</a>
But what about loading full dapps or websites from IPFS? Unlike static assets, web apps and websites require a way to resolve standard URLs to their corresponding content addressed resources.
This is where the Service Worker Gateway comes in, which builds on top of Verified Fetch.
## Service Worker Gateway
The [Service Worker Gateway](https://github.com/ipfs/service-worker-gateway) is a Web native IPFS gateway that runs in the browser. It implements the [IPFS Gateway spec](https://specs.ipfs.tech/http-gateways/subdomain-gateway/) in a [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) and fetches IPFS content directly from providers on the network in addition to verifying it locally.
In a [previous blog post](https://blog.ipfs.tech/dapps-ipfs/), we looked at how web publishing works with IPFS. This can be summarized as:
- The web app is static, i.e. just files and directories containing HTML, JS, CSS, images, etc. that make up the app. This is typically the build output of a frontend framework or a static site generator.
- The web app's build outputs are encoded with [UnixFS](https://docs.ipfs.tech/concepts/glossary/#unixfs) and addressed by a [CID](https://docs.ipfs.tech/concepts/content-addressing/#cid) which represents the root of the app (see diagram below).
- There are IPFS nodes (aka providers) that have the blocks for the CID.
![Encoding a build as UnixFS](../assets/ipfs-on-the-web-2024/encoding-builds-as-unixfs.png)
### Decentralized Frontends with the Service Worker Gateway
The Service Worker Gateway unleashes new possibilities for decentralized web publishing:
- **Decentralized:** with peer-to-peer retrieval.
- **Trustless:** with local verification, removing the implicit trust in any given gateway or provider.
- **Offline use:** Visited pages are cached in the Cache API, enabling offline support for every static web app.
<br />
<a href="https://inbrowser.link" class="cta-button" target="_blank">Try the Service Worker Gateway</a>
For example, the IPFS blog is statically generated and has a distinct CID for each version. With the help of Fleek, each [build is encoded with UnixFS, given a CID](https://github.com/ipfs/ipfs-blog/runs/31658981603) and provided to the IPFS network. The [DNSLink](https://docs.ipfs.tech/concepts/dnslink/) record is also updated to the latest release CID.
Now, instead of using a trusted gateway, e.g. `https://blog-ipfs-tech.ipns.dweb.link/`, you can load the blog using the Service Worker Gateway at [blog-ipfs-tech.ipns.inbrowser.link](https://blog-ipfs-tech.ipns.inbrowser.link).
![Service Worker Gateway Diagram](../assets/ipfs-on-the-web-2024/sw-gw-diagram.png)
> **Note:** There's an inherent trade off with the Service Worker Gateway: it requires an initial upfront cost of fetching and installing the Service Worker which fetches and verifies data. This is why the first load may be slower than using a trusted gateway.
### Note on composability
The Service Worker Gateway also highlights the focus on composability across the JavaScript/TypeScript implementations of IPFS and libp2p:
The [Service Worker Gateway](https://github.com/ipfs/service-worker-gateway) depends on [Verified Fetch](https://github.com/ipfs/helia-verified-fetch), which depends on [Helia](https://github.com/ipfs/helia) which depends on [js-libp2p](https://github.com/libp2p/js-libp2p).
![Libp2p composability](../assets/ipfs-on-the-web-2024/sw-gw-composability.png)
### Service Worker Gateway: What's new
As we embarked on this project, we focused on getting the basics right:
- Service Worker lifecycle management with custom gateways and delegated routing configuration.
- Subdomain origin isolation according to the [Subdomain Gateway specification](https://specs.ipfs.tech/http-gateways/subdomain-gateway/).
- Testing infrastructure to ensure compliance with the specs.
- Basic error handling and fallback to trusted gateways.
- Correct caching of assets.
- Division of responsibilities between the Verified Fetch library and the Service Worker Gateway to ensure they are both useful without duplicating functionality.
- HTTP retrieval from recursive gateways and HTTP gateway providers.
> **Note:** There's a subtle difference between recursive gateways and HTTP gateway providers. Recursive gateways, like `ipfs.io` and `trustless-gateway.link`, will fetch content by CID from providers when the content is not locally available.
> HTTP gateway providers on the other hand, are IPFS HTTP gateways discovered via the [IPNI](https://docs.ipfs.tech/concepts/ipni/) (with the `transport-ipfs-gateway-http` protocol) that only return blocks for CIDs they have.
Over the last few months, we've been improving the reliability and user experience. Most importantly, we've added support for direct peer-to-peer retrieval with js-libp2p under the hood. This means that the Service Worker Gateway can now leverage a broader set of provider peers that have either WebTransport or Secure WebSocket enabled.
This brings us to the next topic: **browser transports**, which play a crucial role in making both IPFS and libp2p on the web a reality.
## Browser transports
Browser transports (protocols) are the bread and butter of the web and the Achilles heel of IPFS on the web. If you can't communicate with other peers, you can't do much.
Browsers communicate over the internet using a number of transport protocols, each with their own strengths and weaknesses. Assuming a web app is in a [Secure Context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts), i.e., served over HTTPS as most modern web apps are, the following transport protocols are available:
- **HTTPS**: Request/Response HTTP over TLS.
- **Secure WebSocket**: Secure bidirectional streaming communication over WebSockets.
- **WebRTC**: Initially conceived for real-time browser-to-browser communication, e.g. for video, audio, and data streaming.
- **WebTransport**: A QUIC based replacement for WebSockets.
The following table summarizes the capabilities of each transport:
| | Bi-directional streaming | Requires TLS Certificate and domain | Widely supported | Useable in Service Worker | Browser-to-Browser |
| ---------------- | ------------------------ | ----------------------------------- | ---------------- | ------------------------- | ------------------ |
| HTTPS | ❌ | ✅ | ✅ | ✅ | ❌ |
| Secure WebSocket | ✅ | ✅ | ✅ | ✅ | ❌ |
| WebRTC | ✅ | ❌ | ✅ | ❌ | ✅ |
| WebTransport | ✅ | ❌ | ❌ | ✅ | ❌ |
> **Note:** while streaming is technically possible with HTTPS, browsers don't allow reading from the response until the request has been fully sent. See [this issue](https://github.com/whatwg/fetch/issues/1254) for more details.
### HTTPS and Secure WebSockets
HTTP is widely supported in browsers and implementations of IPFS. Perhaps most common is the [IPFS HTTP Gateway](https://docs.ipfs.tech/reference/http/gateway/#trusted-vs-trustless), a general purpose retrieval API with HTTP semantics that is broadly used in IPFS implementations, tooling and infrastructure.
#### Request/Response vs Bi-directional streaming
Request/response protocols like HTTP are not very well suited for streaming protocols like [Bitswap](https://docs.ipfs.tech/concepts/bitswap/). WebSocket (and WebRTC and WebTransport), are bi-directional streaming protocols and are well suited for libp2p based protocols like Bitswap. What's more, WebSockets are supported in all modern browsers and are compatible with Service Workers.
#### TLS certificates for HTTP and WebSockets
Where things get slightly tricky is TLS for **both HTTP and WebSockets**, i.e. HTTPS and Secure WebSockets, which are required by Secure Contexts and Service Workers.
HTTPS and Secure WebSockets require a CA-signed TLS certificate and a domain, which most peers in the IPFS network do not have by default.
To address this, we've been working on a project to automate the issuance of wildcard Let's Encrypt TLS certificates for all publicly dialable IPFS nodes. More on that in the [AutoTLS](#auto-tls-with-libp2pdirect) section below.
### WebRTC
WebRTC is a browser-to-browser communication protocol, e.g. for video, audio, and data streaming.
In the context of IPFS and libp2p, there are two implementations of [WebRTC](https://github.com/libp2p/specs/tree/master/webrtc):
- **WebRTC:** for browser-to-browser communication.
- **WebRTC-Direct:** for browser-to-server communication without the need for trusted TLS certificates.
The spec for [WebRTC for browser-to-browser communication in libp2p](https://github.com/libp2p/specs/blob/master/webrtc/webrtc.md) was ratified last year and includes a decentralized signalling mechanism for exchanging SDPs that leverages Circuit Relays. We've written an [extensive guide](https://docs.libp2p.io/guides/getting-started/webrtc/) to help you get started and also ran a workshop at IPFS Camp. It's also used by [Universal Connectivity](https://github.com/libp2p/universal-connectivity) and [IPFS Share](https://share.ipfs.io) to demonstrate the possibilities of browser-to-browser communication.
We've also seen the ecosystem thrive with projects like [Topology](https://www.youtube.com/watch?v=2FFjJ-jBymQ), [OrbitDB](https://github.com/orbitdb/orbitdb), and [Canvas](https://canvas.xyz/) that rely on js-libp2p and WebRTC as the foundation for their browser-to-browser communication.
It's also worth noting that WebRTC is the only browser transport with a mechanism for NAT hole-punching, which is the process of establishing a direct connection between two peers through a network address translator (NAT). This is a crucial part of establishing a direct connection between two peers in a decentralized network like IPFS.
### WebRTC-Direct
WebRTC-Direct was designed a transport protocol to allow browser-to-server communication without the need for a domain name and CA-signed TLS certificates.
WebRTC-direct is stable as of [go-libp2p v0.36.1](https://github.com/libp2p/go-libp2p/releases/tag/v0.36.1) and enabled by default in [Kubo as of 0.30.0](https://github.com/ipfs/kubo/releases/tag/v0.30.0).
This is a huge milestone, because it means that browsers can dial publicly reachable IPFS nodes with WebRTC-direct enabled without TLS certificates or domain names. We therefore recommend upgrading to the latest version of Kubo to take advantage of this.
### Limits of WebRTC in browsers
There are two caveats with WebRTC in browsers:
- WebRTC isn't available in Service Workers.
- [Chrome limits the number of WebRTC connections per window to 500](https://issues.chromium.org/issues/41378764) after which it will prevent establishing new connections.
### WebTransport
[Two years ago, the IPFS and libp2p projects made a bet on the promise of WebTransport](https://blog.libp2p.io/2022-12-19-libp2p-webtransport/) and it's been a bumpy road. WebTransport is a promising protocol, especially for libp2p and IPFS, because it allows bi-directional streaming communication with many modern improvements over WebSockets, **without the need for CA-signed certificates and a domain**. This was a game changer, since most peers in the IPFS network do not have a domain name.
However, the WebTransport specification is still in draft, and browser implementations have had a [number of bugs and issues](https://github.com/libp2p/js-libp2p/issues/2572), that we've been working with the browser vendors to address. As such, browser compatibility breaks as soon as the interoperability target changes.
While we still believe in the longer term promise of WebTransport, we've reoriented our immediate priorities to WebRTC-Direct (which is now available) and Secure WebSockets (see [AutoTLS](#autotls-with-libp2pdirect) below) . Nonetheless, we continue to work with browser vendors and standard bodies to get WebTransport to a stable and interoperable state.
## AutoTLS with libp2p.direct
AutoTLS is a new feature that significantly improves how browsers (Helia, Service Worker) can connect to Kubo nodes.
As mentioned above, Secure WebSockets is the only streaming transport that works reliably in Service Workers, but requires a TLS certificate and domain.
To overcome this, the Shipyard team has been working on a project to automate the issuance of wildcard TLS certificates for publicly dialable Kubo nodes. This way, nodes can use [Secure WebSockets libp2p transport](https://github.com/libp2p/specs/blob/master/websockets/README.md) without needing to register a domain name.
We call this service **AutoTLS** and it's powered by the `libp2p.direct` domain.
[AutoTLS](https://github.com/ipfs/kubo/blob/master/docs/config.md#autotls) enables publicly reachable Kubo nodes, i.e. nodes dialable from the public internet, to get a wildcard TLS certificate unique to their PeerID at `*.<PeerID>.libp2p.direct` without needing to register and configure a domain name. This enables direct libp2p connections and direct retrieval of IPFS content from browsers using Secure WebSockets.
### How AutoTLS works
Under the hood, the infrastructure behind `libp2p.direct` has two roles:
- An [ACME DNS-01 Challenge](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) broker for getting wildcard TLS certificate for `*.[PeerID].libp2p.direct`. To do so it authenticates PeerIDs requesting certificates, verifies their network reachability and sets the TXT DNS record for the [ACME challenge](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) at `_acme-challenge.<PeerID>.libp2p.direct`.
![AutoTLS part 1](../assets/ipfs-on-the-web-2024/auto-tls-1.svg)
- The authoritative DNS Server for `*.libp2p.direct`. Notably, the IP addresses it resolves to are encoded in the DNS name, e.g. `1-2-3-4.<peerID>.libp2p.direct` resolves to the A record with the IP `1.1.1.1`. This keeps the DNS server stateless and simple to operate while ensuring that even when a Kubo node's IP address changes, it's resolvable without coordination.
![AutoTLS part 2](../assets/ipfs-on-the-web-2024/auto-tls-2.svg)
> **Note:** AutoTLS is not a replacement for Let's Encrypt or other TLS certificate authorities. It's a complementary service for getting a TLS certificate for your Kubo node's unique PeerID without the need for your own domain name.
AutoTLS is provided as a public good service and operated by [Interplanetary Shipyard](https://ipshipyard.com) and is available on an [opt-in basis with Kubo 0.32.1](https://github.com/ipfs/kubo/blob/v0.32.1/docs/changelogs/v0.32.md#-autotls-automatic-certificates-for-libp2p-websockets-via-libp2pdirect).
We're also adding support for AutoTLS in [js-libp2p](https://github.com/libp2p/js-libp2p/pull/2800), which would allow the JavaScript ecosystem to also reap the benefits of AutoTLS.
AutoTLS is available in [Kubo v0.32.1](https://github.com/ipfs/kubo/releases/tag/v0.32.1) or [IPFS Desktop v0.40.0](https://github.com/ipfs/ipfs-desktop/releases/tag/v0.40.0) (which includes Kubo). We encourage you to try it out and [share your feedback](https://github.com/ipfs/kubo/issues/10560).
<br />
<a href="https://github.com/ipfs/ipfs-desktop/releases/tag/v0.40.0" class="cta-button" target="_blank">Download IPFS Desktop</a>
## IPFS over HTTP
A theme that runs through many of the projects in this blog post is the use of HTTP as the blueprint for interoperability.
This is driven by the following reasons:
- HTTP is ubiquitous in the web ecosystem and is well understood by developers.
- HTTP is supported in all modern browsers and is compatible with Service Workers.
- HTTP has powerful caching primitives with wide adoption across both infrastructure providers and open source infrastructure, opening the door to flexible caching which matches well with the immutable nature of content addressed data.
More about this in a recent talk from IPFS Camp:
@[youtube](4GwxrQ9Z3Bk)
## Browser developer tools
Along with the new browser transports, we've also been working on a number of developer tools to make it easier to debug web applications that rely on libp2p and IPFS. Historically, debugging IPFS and libp2p in the browser meant enabling logging and then grepping through the logs.
We've now released a [browser extension](https://github.com/libp2p/js-libp2p-devtools) that allows you to inspect the libp2p node and interact with it straight from the browser developer tools.
So how does it work? The browser extension pairs with a [metrics implementation](https://github.com/libp2p/js-libp2p/tree/main/packages/metrics-devtools) that you add to your js-libp2p node. The extension then fetches the metrics from the node over RPC and displays them in the browser developer tools.
This relies on the same [metrics interface](https://github.com/libp2p/js-libp2p/blob/main/packages/interface/src/metrics/index.ts) that js-libp2p exposes, which can also be used for monitoring js-libp2p with Prometheus (in Node.js)
Learn more about the browser extension in this talk from IPFS Camp:
@[youtube](JChwfTA6SX0)
## Delegated Routing HTTP API
The [Delegated Content Routing HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) allows IPFS nodes to offload content and peer routing to another process/server using an HTTP API. In addition, it allows for composability and experimentation with different routing systems.
Since the spec was [ratified in 2022](https://specs.ipfs.tech/ipips/ipip-0337/), it's been positively received and gradually implemented and integrated in the ecosystem:
- The IPFS Foundation provides a [public delegated routing endpoint](https://docs.ipfs.tech/concepts/public-utilities/#delegated-routing) backed by [someguy](https://github.com/ipfs/someguy) with the URL `https://delegated-ipfs.dev/routing/v1` that is operated by Interplanetary Shipyard.
- The [cid.contact](https://cid.contact) network indexer exposes a compatible `/routing/v1/providers` endpoint for finding providers for a CID.
- Helia has both a [client](https://github.com/ipfs/helia-delegated-routing-v1-http-api/tree/main/packages/client) and a [server implementation](https://github.com/ipfs/helia-delegated-routing-v1-http-api/tree/main/packages/server) of the Delegated Routing HTTP API. The client is configured by default in [Helia](https://github.com/ipfs/helia) with the public Delegated Routing endpoint.
- js-libp2p also supports the [Delegated Routing HTTP API with the Helia client](https://github.com/libp2p/js-libp2p/blob/main/doc/CONFIGURATION.md#setup-with-delegated-content-and-peer-routing)
- The [Boxo](https://github.com/ipfs/boxo/tree/main/routing/http) SDK comes with a client and server implementation of the Delegated Routing HTTP API which is used by Kubo
- Kubo both uses the Delegated Routing HTTP API for querying the IPNI. Additionally, you can expose a delegated routing endpoint since [Kubo v0.23](https://github.com/ipfs/kubo/blob/ecb81c92221c8c563d7d245df193dc96163a76d0/docs/changelogs/v0.23.md#self-hosting-routingv1-endpoint-for-delegated-routing-needs).
### How Delegated Routing HTTP API helps IPFS on the web?
The [Distributed Hash Table (DHT)](https://docs.ipfs.tech/concepts/dht/) is the default routing system for IPFS and is used for finding peers and providers for CIDs in the network. Traversing the DHT however requires opening connections to around log₂(N) peers in the network, where N is the total number of peers. For a network such as IPFS, this can easily mean establishing connections to tens of peers just to find a single provider.
The Delegated Routing HTTP API empowers resource constrained clients like web browsers by significantly reducing the number of network connections necessary to fetch content addressed data directly from provider peers.
In other words, you can reduce the number of connections to 1 by offloading routing to another process/server using the HTTP API, e.g. the public goods endpoint at `https://delegated-ipfs.dev/routing/v1`.
### Introducing filtering for Provider and Peer records
There are many cases where most of the results from the Delegated Routing HTTP API are not actionable by clients, because the client does not support either the **network transport protocol**, e.g. TCP, or the **transfer protocol**, e.g. GraphSync.
[IPIP-484](https://specs.ipfs.tech/ipips/ipip-0484/) introduces filtering for Provider and Peer records, which allows for more efficient routing. For browsers, IPIP-484 reduces the overhead of unactionable results returned by the API. For Kubo it means less load establishing connections to peer that only support GraphSync. Moreover, it makes [manual debugging easier](https://delegated-ipfs.dev/routing/v1/providers/bafybeicklkqcnlvtiscr2hzkubjwnwjinvskffn4xorqeduft3wq7vm5u4?filter-protocols=transport-bitswap,unknown&filter-addrs=!p2p-circuit,webrtc-direct,wss,tls) with the filters in the query parameters.
IPIP-484 is already implemented in [Boxo](https://github.com/ipfs/boxo/tree/main/routing/http) SDK, [someguy](https://github.com/ipfs/someguy), [Helia](https://github.com/ipfs/helia-delegated-routing-v1-http-api), [Kubo](https://github.com/ipfs/kubo), and [Rainbow](https://github.com/ipfs/rainbow).
## Bitswap improvements
[Bitswap](https://specs.ipfs.tech/bitswap-protocol/) is the most prevalent data transfer protocol in the IPFS network. Our experience operating the public IPFS Gateways on behalf of the IPFS Foundation gives us an opportunity to measure and optimize Bitswap at scale.
Based on tracing and metrics from the public IPFS Gateways, we've [identified and released](https://github.com/ipfs/boxo/blob/main/CHANGELOG.md) a number of performance improvements to the [Go implementation of Bitswap in Boxo](https://github.com/ipfs/boxo/tree/main/bitswap), which is used by Kubo and Rainbow.
## Libp2p improvements
Libp2p is a dependency of most of the above projects and is the bedrock of the entire IPFS stack.
Beyond the work mentioned earlier on transports, we've also been working on numerous improvements and specs to libp2p that support the above projects. Check out the [js-libp2p Roadmap](https://github.com/libp2p/js-libp2p/blob/main/ROADMAP.md) for more details.
### AutoNAT v2
[AutoNAT v2](https://github.com/libp2p/specs/blob/master/autonat/autonat-v2.md) is a new version of the AutoNAT protocol that provides more precise reachability information for nodes.
It provides higher granularity in determining reachability for the node, e.g. AutoNAT v2 allows us to determine reachability for all combinations of (`ipv4/ipv6`, `tcp/udp`).
AutoNAT v2 is implemented in [go-libp2p](https://github.com/libp2p/go-libp2p/releases/tag/v0.36.1) and [the rollout to the public swarm started in Kubo v0.30.0](https://github.com/ipfs/kubo/blob/v0.30.0/docs/changelogs/v0.30.md#autonat-v2-service-introduced-alongside-v1).
While not directly related to IPFS on the web, AutoNAT v2 improves the network layer of non-browser IPFS nodes, which is a crucial part of the IPFS network infrastructure.
### NAT Hole Punching
A number of fixes and improvements to [NAT hole punching](https://blog.ipfs.tech/2022-01-20-libp2p-hole-punching/) have been implemented in go-libp2p which should help improve connectivity of IPFS nodes behind NATs.
> **Note:** NAT hole punching in browsers is different from NAT hole punching in QUIC and TCP. Browsers use [ICE with STUN servers for WebRTC NAT traversal](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols#ice), while non-browser libp2p peers use [Circuit Relay v2](https://docs.libp2p.io/concepts/nat/circuit-relay-v2/) and [DCUtR](https://docs.libp2p.io/concepts/nat/dcutr/).
### js-libp2p Amino DHT Bootstrapper
The [js-libp2p Amino DHT Bootstrapper](https://github.com/libp2p/js-libp2p-amino-dht-bootstrapper) is a new Amino DHT bootstrapper like the go-libp2p and rust-libp2p, but implemented in js-libp2p.
Beyond the obvious benefit of having another bootstrapper as a public good, it also allows us to stress test js-libp2p with high traffic. By monitoring with Prometheus, we've been able to find and resolve a number of bugs in several js-libp2p packages.
The bootstrapper supports TCP and Secure WebSockets and can be connected to at `/dnsaddr/va1.bootstrap.libp2p.io/p2p/12D3KooWKnDdG3iXw9eTFijk3EWSunZcFi54Zka4wmtqtt6rPxc8`.
### libp2p over HTTP
[Libp2p over HTTP](https://github.com/libp2p/specs/tree/master/http) defines how libp2p peers can use and expose libp2p protocols over HTTP. This has the benefit of allowing a wider variety of nodes to participate in the libp2p network, in addition to providing more interoperability opportunities.
For example, the [backend for the AutoTLS service](https://github.com/ipshipyard/p2p-forge) exposes an API which uses libp2p over HTTP to authenticate libp2p Peer IDs in HTTP requests.
More on this in a talk from IPFS Camp:
@[youtube](CNZBzt5tFvg)
### WebSockets single encryption
Historically, Secure WebSockets in libp2p involved double encryption:
- First, a Secure WebSocket connection is secured using a CA-signed TLS certificate tied to a hostname.
- Then, on the libp2p layer, the connection is authenticated and encrypted again using [Noise](https://noiseprotocol.org/) to prevent [MITM attacks](https://en.wikipedia.org/wiki/Man-in-the-middle_attack) by authenticating the libp2p Peer ID.
While Noise is necessary for Peer ID authentication, it's not strictly needed for encryption. Seeing as double encryption is obviously suboptimal in terms of resource consumption, we've been working on an optimization to [introduce explicit opt-in delegation of encryption to TLS](https://github.com/libp2p/specs/pull/625).
At the time of writing, constrainsts in the WebSocket API prevent this from being implemented. If ratified and implemented, this optimization should reduce the computational overhead of each Secure WebSocket connection which can add up when opening many connections.
## What's next?
As we mark this milestone, we're also looking ahead to the next phase of our work.
There are several areas where we'll be focusing our efforts in the coming months:
- Productionising of AutoTLS infrastructure and integrations in Kubo and other IPFS implementations
- HTTP Retrieval in Boxo/Kubo
- More examples, documentation, and guides
- Improved error handling in the Service Worker Gateway
- Integration of the Service Worker Gateway into IPFS Companion
## Support our work
Interplanetary Shipyard is a small team of highly experienced full-time maintainers. If you use IPFS and libp2p, please consider [supporting our work](https://ipshipyard.gitwallet.co/).
## Summary
All the above projects are either complete or nearing completion. This is the result of arduous collaboration across both the libp2p and IPFS stacks in addition to standard bodies and browser vendors.
**Resilient, decentralized, and verified** IPFS retrieval on the web is finally a reality.
This breadth and reach of this work is only possible because of the open-source nature of the IPFS and libp2p projects. But it also underscores the importance of funding the Interplanetary Shipyard team so that we can continue to shepherd these efforts across the ecosystem.
🍎 We're excited to see these projects come to fruition and can't wait to see what the IPFS community builds on top of them.

View File

@@ -0,0 +1,116 @@
---
title: 'IPFS & libp2p Devs Go Independent: Meet Interplanetary Shipyard'
description: 'Meet the team behind Interplanetary Shipyard, the newly created entity of many core maintainers behind the most popular implementations of IPFS and libp2p.'
author: Adin Schmahmann
date: 2024-04-08
permalink: '/shipyard-hello-world/'
header_image: '/shipyard-hello-world.png'
tags:
- 'ipfs'
- 'libp2p'
- 'shipyard'
- 'interplanetary shipyard'
---
*Last November, Protocol Labs, where IPFS was invented and incubated, [announced its commitment to decentralizing project governance](https://protocol.ai/blog/advancing-ipfs-and-libp2p-governance/). In this post, you'll hear from Adin Schmahmann of Interplanetary Shipyard, introducing the new team, its roadmap, and what this means for the IPFS community.*
Since its release nearly ten years ago, IPFS has become the connective tissue that powers the infrastructure layer for the decentralized web and connects web2 to web3. Well over 50 million monthly active users access IPFS-based applications, from ENS addresses (~90% of content hashes) to NFTs to blockchains to IoT to enterprise applications. IPFS has always been an open, decentralized, censorship-resistant protocol, and now the project itself is increasingly decentralized too.
Now were delighted to announce our own "exit to community": [Interplanetary Shipyard](https://ipshipyard.com/), an **independent collective of people maintaining many of the most popular implementations in the IPFS and libp2p ecosystem**.
Our founding team includes many longtime maintainers of widely-used IPFS and libp2p implementations and tools. Shipyard is laser-focused on supporting users of the open-source projects in the Interplanetary stack. We are committed to building bridges between web2 and web3 through open-source innovation. We work directly with teams building on IPFS and libp2p, both to troubleshoot and improve current implementations, and also to inform our public goods roadmap. We are registered as a Delaware nonstock corporation.
Our current set of implementations maintained by Shipyard include:
<table style="width: 100%; border-collapse: collapse;">
<tr style="border-width: thin; border-color: #888; text-align: center;">
<td colspan="2" style="border-width: thin; border-color: #888;"><strong>IPFS</strong></td>
<td style="border-width: thin; border-color: #888; text-align: center;"><strong>libp2p</strong></td>
</tr>
<tr>
<td rowspan="2" style="border-width: thin; border-color: #888; padding: .5rem;">
<p><a href="https://github.com/ipfs/boxo/#readme">Boxo</a> <small>(GO SDK)</small></p>
<p><a href="https://github.com/ipfs/kubo/#readme">Kubo</a> <small>(Server, Desktop, Brave)</small></p>
<p><a href="https://github.com/ipfs/rainbow/#readme">Rainbow</a> <small>(Gateway impl.)</small></p>
<p><a href="https://github.com/ipfs/someguy#readme">Someguy</a> <small>(Router impl.)</small></p>
<p><a href="https://github.com/ipfs/helia#readme">Helia</a> <small>(JS SDK)</small></p>
<p><a href="https://github.com/ipfs/helia-verified-fetch#readme">verified-fetch</a> <small>(Web API for JS)</small></p>
<p><a href="https://github.com/ipfs-shipyard/service-worker-gateway#readme">Service Worker Gateway</a> <small>(impl. WIP)</small></p>
<p><a href="https://badbits.dwebops.pub/">Bad Bits Denylist</a> <s</p>
</td>
<td rowspan="2" style="border-width: thin; border-color: #888; padding: .5rem;">
<p><a href="https://github.com/ipfs/ipfs-companion#readme">IPFS Companion</a> <small>(browser extension)</small></p>
<p><a href="https://github.com/ipfs/ipfs-desktop#readme">IPFS Desktop</a> <small>(Windows/macOS/Linux)</small></p>
<p><a href="https://ipfscluster.io/">IPFS Cluster</a> <small>(on hold)</small></p>
<p><a href="https://docs.ipfs.tech/concepts/public-utilities/#public-ipfs-gateways">ipfs.io</a> <small>(public utility)</small></p>
<p><a href="https://docs.ipfs.tech/concepts/public-utilities/#public-ipfs-gateways">dweb.link</a> <small>(public utility)</small></p>
<p><a href="https://docs.ipfs.tech/concepts/public-utilities/#public-ipfs-gateways">trustless-gateway.link</a> <small>(public utility)</small></p>
<p><a href="https://docs.ipfs.tech/concepts/public-utilities/#delegated-routing">delegated-ipfs.dev</a> <small>(public utility)</small></p>
<p><a href="https://docs.ipfs.tech/concepts/public-utilities/#amino-dht-bootstrappers">Amino DHT</a> <small>(public utility)</small></p>
<p><a href="https://stats.ipfs.network">IPFS Measurements</a></p>
</td>
<td rowspan="2" style="border-width: thin; border-color: #888; padding: .5rem;">
<p><a href="https://github.com/libp2p/go-libp2p#readme">go-libp2p</a></p>
<p><a href="https://github.com/libp2p/js-libp2p#readme">js-libp2p</a></p>
<p><a href="https://github.com/libp2p/rust-libp2p#readme">rust-libp2p</a></p>
<p>libp2p Measurements</p>
</td>
</tr>
<tr></tr>
</table>
We have an extensive [initiative roadmap](https://ipshipyard.com/initiatives) and are eager to get more input from the developer community. To shout out just a few ideas were working on:
* [Reliable, decentralized, and verified retrieval of CIDs](https://ipshipyard.com/initiatives/reliable-decentralized-and-trustless-browser-fetching-of-ipfs-content) (content identifiers) in browsers. The idea is to allow web browsers to fetch CIDs in a verifiable and trustless manner without being vulnerable to centralized chokepoints. You can participate and follow along with this work in the [IPFS dApps Working Group](https://github.com/ipfs/dapps-wg).
* [IPFS for pioneers](https://ipshipyard.com/initiatives/ipfs-for-pioneers-enable-building-interoperable-ipfs-systems-using-http-protocols). We aim to enable the building of interoperable IPFS systems using extremely minimal HTTP-based protocols so that building IPFS-compatible tooling in something like Python (that doesnt have much IPFS or libp2p tooling today) is super easy and appealing.
* [Self-service tooling for debugging IPFS request handling](https://ipshipyard.com/initiatives/self-service-tooling-for-debugging-ipfs-request-handling). The idea here is that a user can hit a Boxo-based HTTP gateway and if they experience an error, get a link to download an IPFS request trace. They can then use easy tooling locally or centrally hosted to pinpoint the issue.
**About Shipyard**
IPFS is a big project with big ambitions of being the essential content addressing layer for the next generation of the internet. That ecosystem comes with a sprawling set of resources that IPFS users today depend on in some way, including:
* People and expertise
* Applications
* Libraries
* Networks
* Infrastructure
Think of Shipyard as the union of dockworkers who send ships (projects) out onto the ocean of the distributed web, well-built and equipped with all they need to sail. The next era of the internet is still in its infrastructure phase; IPFS has already positioned itself as one of the core infrastructure layers for the next generation of the internet, and these implementations will be working with the foundation to continue to steward the project.
We want the community to inform how we grow and sustain ourselves, and are eager for community input on our roadmap. We believe the builders growing IPFS, libp2p, and ProbeLab will thrive best together, under their own roof.
So, a few questions might arise next.
**Why now?**
The set of projects leveraging IPFS and libp2p is now so broad and diverse that it exceeds the purview of one company. Open-source projects need to be managed and owned by their community.
Consider the precariousness of core IPFS development being tied to a single company, and thus a single funding source. What if that company experiences a change in strategy? What if that funding source decides to prioritize something different from what the IPFS community believes is most important? In web2, the model for supporting and promoting open-source projects was to get the largest centralized players to pay their own employees to maintain the tooling. What does that model look like for the next generation of the internet?
We want to let the community decide. We believe putting control of the IPFS stack in the hands of an independent collective will foster better resiliency, transparency, open-protocol governance, and long-term future health. By **operating independently while collaborating publicly**, we will build alongside other technical teams that rely on this essential infrastructure.
**Who maintains and funds this work?**
We're grateful to Protocol Labs, our anchor financial partner for 2024-2025, for its continued support. Were thankful as well to our early ecosystem supporters and patrons including Optimism's RetroPGF grants, Cloudflare, Pinata, Fission, and CoopHive.
Were exploring multiple avenues for financial support, and in keeping with our new community collective approach, were thinking in public about what those avenues could be: public goods funding, community grants, commercial services, crypto-native funding, and more.
**Our team is raising an additional $3 million in community contributions to sustain our work as technical stewards in 2024**. Heres how you can support Shipyard:
* **Support Public Goods Maintenance** \
If you or your project depends upon IPFS or libp2p, we invite you to consider contributing toward the ongoing maintenance of these important protocols as a public good. You can donate directly to IPFS or libp2p through the [Open Impact Foundation](https://openimpact.foundation/).
* **Hire Shipyard for Commercial Services** \
In addition to public good funding, we are also beginning to support commercial service agreements for our core users, including service tiers, contracted support, and other embedded engineering work. You can check out our [commercial services tiers](https://ipshipyard.gitwallet.co/) or reach out directly if you have a project youd like to collaborate with us on.
We're excited for Shipyard's opportunity to strengthen the IPFS and libp2p ecosystems through community feedback and patronage. If you would like to get more involved we're in the [IPFS](https://docs.ipfs.tech/community/#get-involved) and [libp2p](https://discuss.libp2p.io/) forums, and you can reach us at `contact [AT] ipshipyard.com`.

View File

@@ -174,13 +174,13 @@ Well lean into realizing these breakthroughs and remove the more convoluted m
### Support Fully Speced Delegated Routing Protocols and Endpoints
While it will be possible from a connectivity perspective to make DHT queries from a browser, we expect various applications will want to still delegate out routing. [Reframe](https://blog.ipfs.tech/2022-09-02-introducing-reframe/) is a protocol for delegated routing that other IPFS implementations like Kubo have implemented. While it currently uses HTTP as a transport, it is speced and not tied to the Kubo RPC API. If/when there is a speced protocol for ambient discovery of “Limited Delegated Routers” provided by libp2p, we will support that as well.
While it will be possible from a connectivity perspective to make DHT queries from a browser, we expect various applications will want to still delegate out routing. <del>[Reframe](https://blog.ipfs.tech/2022-09-02-introducing-reframe/)</del> [HTTP Routing V1](https://specs.ipfs.tech/routing/http-routing-v1/) is a protocol for delegated routing that other IPFS implementations like Kubo have implemented. While it currently uses HTTP as a transport, it is [speced](https://specs.ipfs.tech/routing/http-routing-v1/) and not tied to the Kubo RPC API. If/when there is a speced protocol for ambient discovery of “Limited Delegated Routers” provided by libp2p, we will support that as well.
### PL Delegate and Preload Nodes Will Be Shutting Down
Given the new browser-friendly p2p transports discussed above, well shut down the complicated “song-and-dance” with the legacy delegate/preload nodes and the Kubo RPC API described in [js-ipfs in a Browser context](#js-ipfs-in-a-browser-context). This yields a simpler setup for ones application and removes centralized infrastructure.
For delegated routing, one can configure [Reframe](https://blog.ipfs.tech/2022-09-02-introducing-reframe/) endpoints. When it comes to providing content from a browser node, it will be up to developers to account for user behavior like closing tabs or laptop lids. The general recommendation is to either run your own preload node or upload content explicitly to a pinning service for providing.
For delegated routing, one can configure [`/routing/v1`](https://specs.ipfs.tech/routing/http-routing-v1/) endpoints. When it comes to providing content from a browser node, it will be up to developers to account for user behavior like closing tabs or laptop lids. The general recommendation is to either run your own preload node or upload content explicitly to a pinning service for providing.
### Release Helia in 2023
@@ -235,4 +235,4 @@ The timeline for enacting all of the above is still actively being figured out.
Thank you for reading and being on this journey to make IPFS exceptional in JS runtimes!
> Note: An earlier version of this blog post referred to Helia as Pomegranate. The blog post has been updated to reflect the name [chosen by the community.](https://github.com/ipfs/Helia/issues/3#issuecomment-1344434531)
> Note: An earlier version of this blog post referred to Helia as Pomegranate. The blog post has been updated to reflect the name [chosen by the community.](https://github.com/ipfs/Helia/issues/3#issuecomment-1344434531)

View File

@@ -4,6 +4,16 @@ type: Tutorial
sitemap:
exclude: true
data:
- title: Browser P2P Connectivity With WebRTC and js-libp2p
date: 2024-06-12
publish_date:
path: https://docs.libp2p.io/guides/getting-started/webrtc/
card_image: "/libp2p-webrtc.png"
tags:
- libp2p
- WebRTC
- tutorial
- pubsub
- title: Uploading Files to IPFS from a Web Application
date: 2021-06-28
publish_date:

234
src/_blog/verified-fetch.md Normal file
View File

@@ -0,0 +1,234 @@
---
date: 2024-04-18
permalink: /verified-fetch/
title: 'Verified IPFS Retrieval in Browsers with @helia/verified-fetch'
description: 'Verified Fetch is a library streamlining verified retrieval of IPFS content in browsers and JS runtimes, with native support for IPNS, and DNSLink resolution'
author: Daniel Norman
header_image: /verified-fetch/header.png
tags:
- ipfs
- dapps
- Helia
- ipns
- ens
---
## Announcing @helia/verified-fetch
The Shipyard team is thrilled to announce **`@helia/verified-fetch`** is now ready for broader adoption. Verified Fetch is a [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)-like library streamlining verified retrieval of IPFS content in browsers and JS runtimes, with native support for IPNS, and DNSLink resolution. [Try it out](https://www.npmjs.com/package/@helia/verified-fetch) and let us know what you think.
This blog post covers the challenges of IPFS retrieval in browsers and how `@helia/verified-fetch` addresses them with runnable examples. Feel free to jump ahead to [Solution: Verified Fetch](#solution-verified-fetch)
## Problem: Verified IPFS retrieval in browsers is hard
IPFS stands out as the leading decentralized network for distributing content-addressed data (with CIDs), spanning a wide range of use cases such as [off-chain voting](https://docs.ipfs.tech/case-studies/snapshot/), NFTs, [censorship-resistant Wikipedia](https://blog.ipfs.tech/24-uncensorable-wikipedia/), and [dapp distribution](https://blog.ipfs.tech/dapps-ipfs/).
However, developing web applications for the browser with an IPFS implementation capable of verified content retrieval has been an ongoing challenge for developers. The main reason lies in the inherent constraints of the Web Platform: TCP connections aren't allowed, and Certificate Authority signed certificates are required in Secure Contexts which increases the overhead to peer-to-peer retrieval. Other reasons include the apparent complexity of IPFS and the historical lack of focused tooling for verified IPFS retrieval on the Web.
For this reason, many developers use a **trusted gateway** and call it a day. That's understandable and speaks to the ease and utility of gateways as an abstraction of IPFS.
### IPFS Gateways are a useful abstraction for IPFS retrieval
Trusted IPFS Gateways abstract much of the complexity (peer-to-peer connectivity, content routing, content retrieval, verification) of IPFS with a straightforward HTTP API to the IPFS network:
<img alt="gateway architecture diagram" src="../assets/verified-fetch/gateways.png" width="500">
The beauty of IPFS Gateways is in how simple they are to use: you append the CID to the URL of the Gateway and all IPFS magic is handled by the gateway for you.
For example, fetching an image with the CID: [`bafk...beom`](https://cid.ipfs.tech/#bafkreie7ohywtosou76tasm7j63yigtzxe7d5zqus4zu3j6oltvgtibeom) is as simple as constructing the URL: `https://ipfs.io/ipfs/bafkreie7ohywtosou76tasm7j63yigtzxe7d5zqus4zu3j6oltvgtibeom` which can be passed to the `src` attribute of an `<img>`, as follows:
<img class="py-4" alt="image loaded from an IPFS gateway" src="https://ipfs.io/ipfs/bafkreie7ohywtosou76tasm7j63yigtzxe7d5zqus4zu3j6oltvgtibeom" width="350">
### Trusting an IPFS Gateway without verifying is an anti-pattern
**Nonetheless, fetching from a third-party IPFS gateway without verifying is an anti-pattern** and goes against [the principles of IPFS](https://specs.ipfs.tech/architecture/principles/#verification-matters).
Content addressing in IPFS frees you from the model of a single canonical source for data. This is a powerful concept and the root of IPFS' benefits: resilience, censorship resistance, and trustlessness. But, **fully reaping the benefits of IPFS requires verification**.
### Verification facilitates resilience and multi-source retrieval
Verifying IPFS content as part of the retrieval process allows you to fetch it from multiple sources either providers or gateways without trusting them because verification ensures the integrity of the data.
This comes with the downstream benefit of resilience: if one provider or gateway is unavailable, unreachable, or censored, you can still retrieve the CID from another (as long as other providers are available). A [recent outage of the Unpkg CDN](https://www.theverge.com/2024/4/12/24128276/open-source-unpkg-cdn-down) is a great example of why multi-source retrieval is useful.
### Trustless IPFS Gateways enable verification in browsers
[Trustless IPFS Gateways](https://specs.ipfs.tech/http-gateways/trustless-gateway/) have been gaining steam as a means of enabling verification and its downstream benefits with the simplicity of IPFS Gateways over HTTP. In fact, at the time of writing, most [public gateways](https://ipfs.fyi/gateways) support Trustless Gateway responses.
Trustless IPFS Gateways' response types are [fully and incrementally verifiable](https://docs.ipfs.tech/reference/http/gateway/#trustless-verifiable-retrieval): clients can decide between a [raw block](https://docs.ipfs.tech/concepts/glossary/#block) ([`application/vnd.ipld.raw`](https://www.iana.org/assignments/media-types/application/vnd.ipld.raw)) or a [CAR stream](https://docs.ipfs.tech/concepts/glossary/#car) ([`application/vnd.ipld.car`](https://www.iana.org/assignments/media-types/application/vnd.ipld.car)).
Trustless IPFS Gateways are useful for browsers because they can be composed in a way that unleashes many of the aforementioned benefits of IPFS and content addressing.
> **Note:** Browser constraints prevent you from opening connections to "random" addresses that don't have a CA signed certificate, making it hard to build IPFS clients for browsers that go straight to providers. Newer transport such as [WebTransport](https://docs.libp2p.io/concepts/transports/webtransport/) and [WebRTC-direct](https://docs.libp2p.io/concepts/transports/webrtc/) address this challenge in a way that may be able to reduce dependency on IPFS Gateways in the future.
## Solution: Verified Fetch
[`@helia/verified-fetch`](https://www.npmjs.com/package/@helia/verified-fetch) or simply **Verified Fetch** is a new JavaScript library by [The Shipyard team](https://blog.ipfs.tech/shipyard-hello-world/) that makes verified IPFS retrieval from trustless gateways easy. It's written in TypeScript with Web APIs so you can run it in browsers as well as modern JS runtimes.
It's the culmination of multiple streams of work we undertook to bring seamless and deeper IPFS integrations to browsers and improve the development experience with IPFS.
### Familiar, like the Fetch API
Verified Fetch is modeled after the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) and returns [`Response` object](https://developer.mozilla.org/en-US/docs/Web/API/Response) making it easy to adopt and reason about.
For example, fetching the CID of a JSON object is as simple as:
```ts
import { verifiedFetch } from '@helia/verified-fetch'
const resp = await verifiedFetch(
'ipfs://baguqeeradnk3742vd3jxhurh22rgmlpcbzxvsy3vc5bzakwiktdeplwer6pa'
)
const obj = await resp.json()
```
Under the hood, Verified Fetch handles both fetching from trustless gateways and verification:
<iframe height="300" style="width: 100%;" scrolling="no" title="Fetching a CID with @helia/verified-fetch example" src="https://codepen.io/2color/embed/oNOyarL?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/oNOyarL">
Fetching a CID with @helia/verified-fetch example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>).
</iframe>
### Fast and Resilient Retrieval with Multiple Gateways
Verified Fetch supports retrieval from multiple trustless gateways, ensuring both performance and resilience. It comes [pre-configured with three default gateways](https://github.com/ipfs/helia/blob/b67ac5f16eca1df5534c985045250bdb334a85cf/packages/block-brokers/src/trustless-gateway/index.ts#L6-L15), but can be easily customized:
```ts
import { createVerifiedFetch } from '@helia/verified-fetch'
const verifiedFetch = await createVerifiedFetch({
gateways: ['https://trustless-gateway.link', 'https://cloudflare-ipfs.com'],
})
```
### Mutable Pointers: DNSLink & IPNS
Mutable pointers are a powerful way to have a stable pointer that can be updated over time. In the IPFS ecosystem, there are two approaches to this: [IPNS](https://docs.ipfs.tech/concepts/ipns/) and [DNSLink](https://docs.ipfs.tech/concepts/dnslink/).
Verified Fetch supports both using the `ipns://` prefix, and resolves them to a CID, which in turn is fetched and verified.
### Resolving IPNS names with Verified Fetch
IPNS names are resolved using the [Delegated routing over HTTP](https://docs.ipfs.tech/concepts/glossary/#delegated-routing) provided by the [`https://delegated-ipfs.dev` endpoint](https://docs.ipfs.tech/concepts/public-utilities/#delegated-routing).
<iframe height="300" style="width: 100%;" scrolling="no" title="Resolving and Fetching a DNSLink with @helia/verified-fetch example" src="https://codepen.io/2color/embed/BaEVMWW?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/BaEVMWW">
Resolving and Fetching a DNSLink with @helia/verified-fetch example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
</iframe>
Note that you can deploy and configure your own Delegated Routing endpoint with [someguy](https://github.com/ipfs/someguy).
To configure the endpoint in Verified Fetch, pass the endpoint to the `routers` config option:
```ts
import { createVerifiedFetch } from '@helia/verified-fetch'
const verifiedFetch = await createVerifiedFetch({
routers: ['https://delegated-ipfs.dev'],
})
```
### Resolving DNSLink domains with Verified Fetch
DNSLink records are resolved to a CID with a configurable [DNS over HTTPS](https://en.wikipedia.org/wiki/DNS_over_HTTPS) endpoint, which comes preconfigured to Cloudflare and Google:
<iframe height="300" style="width: 100%;" scrolling="no" title="Resolving and Fetching a DNSLink with @helia/verified-fetch example" src="https://codepen.io/2color/embed/YzMvRmv?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/YzMvRmv">
Resolving and Fetching a DNSLink with @helia/verified-fetch example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
</iframe>
### ENS names are also supported with DNSLink
Verified Fetch can also resolve [ENS names](https://ens.domains/) that have the [Contenthash record](https://docs.ens.domains/ensip/7) set with the help of [EthDNS](https://eth.link/) (A DNS bridge to ENS names). To do so, pass a DNS over HTTP EthDNS endpoint to the `dnsResolvers` option, like the [one provided by eth.limo](https://github.com/ethlimo/documentation/blob/master/dns-over-https/doh.md):
```ts
import { createVerifiedFetch } from '@helia/verified-fetch'
import { dnsJsonOverHttps } from '@multiformats/dns/resolvers'
const verifiedFetch = await createVerifiedFetch({
dnsResolvers: {
'eth.': dnsJsonOverHttps('https://dns.eth.limo/dns-query'),
'.': dnsJsonOverHttps('https://cloudflare-dns.com/dns-query'),
},
})
const resp = await verifiedFetch(
'ipns://vitalik.eth/images/scaling-files/cryptokitties.png'
)
```
The following example uses Verified Fetch to [resolve `vitalik.eth`](https://app.ens.domains/vitalik.eth?tab=records) to a CID, fetch the CID, and verify the bytes of the image from Vitalik's website:
<iframe height="500" style="width: 100%;" scrolling="no" title="Resolving and Fetching a DNSLink with @helia/verified-fetch and custom DoH endpoint example" src="https://codepen.io/2color/embed/wvZXRPa?default-tab=js%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/wvZXRPa">
Resolving and Fetching a DNSLink with @helia/verified-fetch and custom DoH endpoint example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
</iframe>
### Supports a wide range of data types
As you may have noticed, you can use Verified Fetch to fetch a wide range of data types. Verified Fetch abstracts much of the complexity of IPLD codecs, supporting [UnixFS](https://docs.ipfs.tech/concepts/file-systems/#unix-file-system-unixfs), [dag-cbor](https://ipld.io/specs/codecs/dag-cbor/), and [dag-json](https://ipld.io/specs/codecs/dag-json/) out of the box. This frees you to focus on your application. The `text()`, `.blob()`, and .`arrayBuffer()` methods will work as expected without a detailed content type.
By default, if the response can be parsed as JSON, Verified Fetch sets the `Content-Type` header of the Response object to as `application/json`, otherwise it sets it as `application/octet-stream`.
[You can also pass the `Accept` header](https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch#the-accept-header) to override [certain](https://github.com/ipfs/helia-verified-fetch/blob/089635d6cd5b10aefbed013e95637ddb90b166e5/packages/verified-fetch/src/utils/select-output-type.ts#L12-L62) response processing to modify the `Content-Type` of the response. For example, you may want to fetch a `dag-cbor` CID with the `Accept` header set to `application/vnd.ipld.dag-json` for easier handling in JavaScript:
<iframe height="300" style="width: 100%;" scrolling="no" title="Fetching a CID with @helia/verified-fetch example" src="https://codepen.io/2color/embed/ExJdayy?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/ExJdayy">
Fetching a CID with @helia/verified-fetch example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
</iframe>
Finally, since you can store **any** kind of file with UnixFS, if you want the `Content-Type` header of the `Response` object to be sniffed on the [Magic Bytes of the retrieved binary data](https://en.wikipedia.org/wiki/Content_sniffing), you can pass the `contentTypeParser` option as follows:
<iframe height="300" style="width: 100%;" scrolling="no" title="Content-Type sniffing with contentTypeParser @helia/verified-fetch example" src="https://codepen.io/2color/embed/JjVmoLy?default-tab=js%2Cresult&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
See the Pen <a href="https://codepen.io/2color/pen/JjVmoLy">
Content-Type sniffing with contentTypeParser @helia/verified-fetch example</a> by Daniel Norman (<a href="https://codepen.io/2color">@2color</a>)
</iframe>
### Customizable
By default, Verified Fetch uses [`@helia/http`](https://github.com/ipfs/helia/tree/main/packages/http#heliahttp): a lightweight version of Helia on IPFS over HTTP with Trustless Gateways. However, you can [pass an instance of Helia that is customized to your needs](https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch#usage-with-customized-helia). A common use-case might be when running on Node.js where you might want to lean more heavily on peer-to-peer retrieval using Bitswap over TCP. In that case, you would likely be better served by a Helia instance backed by libp2p as follows:
```ts
import { createHelia } from 'helia'
import { createVerifiedFetch } from '@helia/verified-fetch'
const verifiedFetch = await createVerifiedFetch(
// Create a Helia instance instance backed by js-libp2p
await createHelia()
)
```
### 📕 Docs & Examples
In addition to the embedded examples above, check out the [README](https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch) for a more elaborate overview of usage patterns and reconfigurability.
We also have a [ready-to-run example](<https://github.com/ipfs-examples/[text](https://inbrowser.dev/ipns/example.ipfs.garden)helia-examples/tree/main/examples/helia-browser-verified-fetch>) showing `@helia/verified-fetch` in the browser handling different content types.
## What's next for Verified Fetch?
This release of Verified Fetch leans heavily on IPFS Gateways. But the journey doesn't end there. Our long-term vision is to [enable direct retrieval from content providers, e.g. Kubo nodes](https://github.com/ipfs/helia/issues/255), which would further increase the resilience of retrievals.
Verified Fetch is already powering IPFS retrieval in the [Service Worker Gateway](https://github.com/ipfs-shipyard/service-worker-gateway), a novel approach to in-browser IPFS gateways. This has given us the chance to dogfood and refine Verified Fetch.
## Try it out today
We built Verified Fetch with app developers in mind. We understand that for developers to be productive with IPFS, you need good abstractions.
We invite you to try it out and can't wait to see what you build with it 🚢.
<br />
<a href="https://npmjs.com/package/@helia/verified-fetch" class="cta-button">
@helia/verified-fetch docs
</a>
## Share your feedback
If you are new to Helia and mostly interested in retrievals, `@helia/verified-fetch` is a great place to get started.
For questions, discussions, and feedback join the [IPFS Forums](https://discuss.ipfs.tech/) or the [#ip-js](https://discord.com/channels/806902334369824788/1136320721044381706) channel in the [IPFS Discord](https://discord.com/invite/ipfs). Finally, the [Helia and Dapps Working Groups](https://lu.ma/ipfs?tag=helia) meet regularly to coordinate and discuss the development of the Helia and advance the tooling for Dapps in the IPFS ecosystem.
If you've already been using [Helia](https://github.com/ipfs/helia/), please take a moment to [fill out the Helia feedback survey](https://ipfs.fyi/helia-feedback). Your feedback will help us understand developer needs and challenges as well as inform our priorities and shape Helias roadmap.
<br />
<a href="https://ipfs.fyi/helia-feedback" class="cta-button">
Helia Feedback Survey
</a>

View File

@@ -4,6 +4,15 @@ type: Video
sitemap:
exclude: true
data:
- title: 'Debugging CID Retrievability With IPFS Check'
date: 2024-09-04
publish_date: 2024-09-04T12:00:00+00:00
path: https://www.youtube.com/watch?v=XeNOQDOrdC0
tags:
- IPFS Check
- debugging
- tutorial
- guide
- title: 'Built with IPFS - Mintter and The Hypermedia Protocol'
date: 2023-11-13
publish_date: 2023-11-13T12:00:00+00:00

View File

@@ -23,7 +23,7 @@ Snapshot is an open-source voting platform for Web3 projects, DAOs, and communit
1. [IPFS Camp 2022](https://2022.ipfs.camp/) is back! Join the community in Lisbon on October 28th-30th for an event focused on celebrating and advancing IPFS, more details coming soon.
2. Kubo (formerly go-ipfs) v0.15.0 is live. Review all the library updates and bug fixes, Blake3 support, Fx Options plugin, and more on [Github](https://github.com/ipfs/kubo/releases/tag/v0.15.0).
3. Kubo v0.14.0 now [supports](https://github.com/ipfs/kubo/releases/tag/v0.14.0#delegated-routing) [Reframe](https://github.com/ipfs/specs/tree/main/reframe#readme), a tool for delegated routing. Learn more about it on the IPFS [blog](https://blog.ipfs.tech/2022-09-02-introducing-reframe/).
3. Kubo v0.14.0 now [supports](https://github.com/ipfs/kubo/releases/tag/v0.14.0#delegated-routing) experimental protocol for delegated routing. Learn more about it on the IPFS [blog](https://blog.ipfs.tech/2022-09-02-introducing-reframe/).
4. Check out [Opensquare Art](https://t.co/TrdDYttxkq)s new Shop Builder for launching no-code minting websites that store NFTs on IPFS and Filecoin via [NFT.Storage](https://nft.storage/).
## **Around the ecosystem 🌎**
@@ -58,4 +58,4 @@ Funding the Commons is back at [Schelling Point](https://schellingpoint.gitcoin.
[**Rust Engineer**](https://angel.co/company/fleekhq/jobs/1505997-rust-engineer-remote): Fleek is looking for an experienced and dedicated Rust Engineer to help build new canister-based products and services on Dfinity's Internet Computer. [**Fleek**](https://fleek.co/) is an Open Web developer platform with everything you need to build sites and apps on the new web and the underlying protocols that power it (Dfinity, Ethereum, IPFS, Filecoin, and more). From hosting, storage, gateways, domains, databases, and more, Fleek has everything you need to seamlessly build and manage Open Web sites. **Fleek**, Remote.
[**Developer Relations**](https://boards.greenhouse.io/textileio/jobs/4075619004): Textile is seeking someone to run large-scale community projects. These include amplifying our grants program to fund community projects, curating governance groups where we bring community stakeholders into our technology planning, engaging with external teams like Gitcoin and EthDenver to support large-scale developer events, and giving technical presentations at events. This position also includes day-to-day engagement with our Slack group, helping to triage GitHub issues, hacking on demos, writing blog posts and technical guides, and more. We are looking for a self-directed leader who wants to build a developer community while staying hands on with technology. **Textile**, Remote.
[**Developer Relations**](https://boards.greenhouse.io/textileio/jobs/4075619004): Textile is seeking someone to run large-scale community projects. These include amplifying our grants program to fund community projects, curating governance groups where we bring community stakeholders into our technology planning, engaging with external teams like Gitcoin and EthDenver to support large-scale developer events, and giving technical presentations at events. This position also includes day-to-day engagement with our Slack group, helping to triage GitHub issues, hacking on demos, writing blog posts and technical guides, and more. We are looking for a self-directed leader who wants to build a developer community while staying hands on with technology. **Textile**, Remote.

View File

@@ -23,7 +23,7 @@ Today, only a few companies are responsible for serving up most of the web. Thes
## **Brand New on IPFS ✨**
1. The IPFS GUI working group is looking to improve the experience on the [**Public Gateway Checker**](https://ipfs.github.io/public-gateway-checker/). [**Book some time**](http://calendly/) to let us know your thoughts and get a swag redemption code.
2. The new [**Kubo v0.16.0**](https://github.com/ipfs/kubo/releases/tag/v0.16.0) is now live. The release supports a more configurable delegated routing system with [**Reframe protocol**](https://github.com/ipfs/specs/tree/main/reframe#readme). [**See for yourself**](https://github.com/ipfs/kubo/releases/tag/v0.16.0).
2. The new [**Kubo v0.16.0**](https://github.com/ipfs/kubo/releases/tag/v0.16.0) is now live. The release supports a more configurable experimental delegated routing system. [**See for yourself**](https://github.com/ipfs/kubo/releases/tag/v0.16.0).
3. Check out [**Capyloon**](https://capyloon.org/), a web-based smartphone OS with a built-in IPFS Rust implementation.
4. [**Fission**](https://fission.codes/) added a new feature to its SDK called WalletAuth that enables IPFS encrypted storage for any blockchain account. Learn more in this [**thread**](https://twitter.com/FISSIONcodes/status/1573092516873781248).
@@ -63,4 +63,4 @@ Join the IPFS community in Lisbon, Portugal on October 28 - 30th! Hosted at the
[**Quality Assurance, Test and Benchmarking Engineer**](https://join.com/companies/capsule/5840067-quality-assurance-test-and-benchmarking-engineer?pid=24a1b46991e3de1fbcf0): At Capsule Social, they've been building the future of decentralized discourse on top of performant, well-designed decentralization tech, cryptographic tech and blockchain tech. Capsule's Quality Assurance, Test and Benchmarking Engineer will be responsible for writing tests and creating a benchmarking infrastructure so that we can be sure that our technology scales to thousands and even millions of users prior to launch. **Capsule Social**, Remote.
[**Full Stack Engineer**](https://www.linkedin.com/jobs/view/3273564662/?alternateChannel=search&refId=7I%2Bx0SHdcmhdQsQzWohg0Q%3D%3D&trackingId=kJtg%2BtTFxm88myxa7QZ0Yg%3D%3D): HENI is looking to recruit a senior and mid-level, permanent Full Stack Developer who will be a key member in the applications team alongside other full-stack and front-end developers, providing fundamental input and knowledge in solving some of these challenges. This would suit someone with demonstrable technical expertise who is driven by a hands-on and stimulating role. **HENI**, London, UK.
[**Full Stack Engineer**](https://www.linkedin.com/jobs/view/3273564662/?alternateChannel=search&refId=7I%2Bx0SHdcmhdQsQzWohg0Q%3D%3D&trackingId=kJtg%2BtTFxm88myxa7QZ0Yg%3D%3D): HENI is looking to recruit a senior and mid-level, permanent Full Stack Developer who will be a key member in the applications team alongside other full-stack and front-end developers, providing fundamental input and knowledge in solving some of these challenges. This would suit someone with demonstrable technical expertise who is driven by a hands-on and stimulating role. **HENI**, London, UK.

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 438 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 KiB

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB