You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Feb 12, 2024. It is now read-only.
Copy file name to clipboardexpand all lines: docs/BROWSERS.md
+14-12
Original file line number
Diff line number
Diff line change
@@ -8,28 +8,29 @@
8
8
-[Code Examples](#code-examples)
9
9
10
10
JS IPFS is the implementation of IPFS protocol in JavaScript. It can run on any
11
-
evergreen browser, inside a service or web worker, browser extensions, Electron and in Node.js.
11
+
evergreen browser, inside a service or web worker, browser extensions, Electron, and in Node.js.
12
12
13
13
**This document provides key information about running JS IPFS in the browser.
14
14
Save time and get familiar with common caveats and limitations of the browser context.**
15
15
16
16
## Limitations of the Browser Context
17
17
18
-
- Transport options are limited to [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) and [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API).
18
+
- Transport options are currently limited to [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) and [WebRTC](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API).
19
19
20
20
This means JS IPFS running in the browser is limited to Web APIs available on a web page.
21
-
There is no access to raw TCP sockets nor lowlevel UDP, only WebSockets and WebRTC.
21
+
There is no access to raw TCP sockets nor low-level UDP, only WebSockets, and WebRTC.
22
22
23
23
- Key [Web APIs](https://developer.mozilla.org/en-US/docs/Web/API) require or are restricted by [Secure Context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts) policies.
24
24
25
25
This means JS IPFS needs to run within Secure Context (HTTPS or localhost).
26
-
JS IPFS running on HTTPS website requires Secure WebSockets (TLS) and won't work with unencrypted one.
26
+
JS IPFS running on HTTPS website requires Secure WebSockets (TLS) and won't work with unencrypted ones.
27
27
[Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) not being available at all.
28
28
29
-
-[DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) is not available in JS IPFS yet.
29
+
-JS IPFS comes with limited support for the [DHT](https://docs.ipfs.tech/concepts/dht/) in client mode which delegates content discovery requests to other DHT nodes.
30
30
31
-
[We are working on it](https://github.com/ipfs/js-ipfs/pull/1994). For now, the discovery and connectivity to other peers is achieved with a mix of rendezvous and
32
-
relay servers, delegated peer/content routing and preload servers.
31
+
However, it's worth noting that even though you'll get results from DHT queries, most nodes in the network are not dialable from browsers because they only support TCP and/or QUIC transports.
32
+
33
+
For now, the content discovery and connectivity to other peers are achieved with a mix of DHT client requests, rendezvous and relay servers, delegated peer/content routing, and preload servers.
33
34
34
35
35
36
## Addressing Limitations
@@ -40,23 +41,24 @@ We provide a few additional components useful for running JS IPFS in the browser
40
41
-[libp2p-webrtc-star](https://github.com/libp2p/js-libp2p-webrtc-star) - incorporates both a transport and a discovery service that is facilitated by the custom rendezvous server available in the repo
41
42
- Instructions on enabling `webrtc-star` in js-ipfs config can be found [here](https://github.com/ipfs/js-ipfs/blob/master/docs/FAQ.md#how-to-enable-webrtc-support-for-js-ipfs-in-the-browser).
42
43
- Make sure to [run your own rendezvous server](https://github.com/libp2p/js-libp2p-webrtc-star#rendezvous-server-aka-signalling-server).
43
-
-[libp2p-webrtc-direct](https://github.com/libp2p/js-libp2p-webrtc-direct) - a WebRTC transport that doesn't require the set up a signalling server.
44
+
-[libp2p-webrtc-direct](https://github.com/libp2p/js-libp2p-webrtc-direct) - a WebRTC transport that doesn't require the set up a signaling server.
44
45
- Caveat: you can only establish Browser to Node.js and Node.js to Node.js connections.
45
46
46
-
**Note:** those are semi-centralized solutions. We are working towards replacing `*-star` with and ambient relays and [libp2p-rendezvous](https://github.com/libp2p/js-libp2p-rendezvous). Details and progress can be found [here](https://github.com/libp2p/js-libp2p/issues/385).
47
+
**Note:** those are semi-centralized solutions. We are working towards replacing `*-star` with ambient relays and [libp2p-rendezvous](https://github.com/libp2p/js-libp2p-rendezvous). Details and progress can be found [here](https://github.com/libp2p/js-libp2p/issues/385).
47
48
48
49
You can find detailed information about running js-ipfs [here](https://github.com/ipfs/js-ipfs#table-of-contents).
49
50
50
51
## Best Practices
51
52
52
-
- Configure nodes for using self-hosted `*-star` signalling and transport service. When in doubt, use WebSockets ones.
53
+
- Configure nodes for using self-hosted `*-star` signalling and transport service. When in doubt, use WebSockets ones.
53
54
- Run your own instance of `*-star` signalling service.
54
55
The default ones are under high load and should be used only for tests and development.
55
-
- Make sure content added to js-ipfs running in the browser is persisted/cached somewhere on regular IPFS daemon
56
+
- Make sure content added to js-ipfs running in the browser is persisted/cached somewhere on a regular long-running IPFS daemon, e.g. [kubo](https://github.com/ipfs/kubo/)
56
57
- Manually `pin` or preload CIDs of interest with `refs -r` beforehand.
57
58
- Preload content on the fly using [preload](https://github.com/ipfs/js-ipfs/blob/master/docs/MODULE.md#optionspreload) feature and/or
- Avoid public instances in production environment. Make sure preload and delegate nodes used in config are self-hosted and under your control (expose a subset of go-ipfs APIs via reverse proxy such as Nginx).
60
+
- Avoid public instances in production environments. Make sure preload and delegate nodes used in config are self-hosted and under your control (expose a subset of [kubo](https://github.com/ipfs/kubo/) (formerly go-ipfs) APIs via reverse proxy such as Nginx).
61
+
- If your main goal is to provide content and files to the IPFS network from a browser and you would like to avoid running infrastructure, consider using a pinning service like [Web3.storage](https://web3.storage/).
0 commit comments