Skip to content

Commit

Permalink
docs: add FAQ (#85)
Browse files Browse the repository at this point in the history
Refs #35

Adds answers to questions asked in that issue.

---------

Co-authored-by: Steve Loeppky <biglep@protocol.ai>
  • Loading branch information
achingbrain and BigLep committed Apr 12, 2023
1 parent 7181dc9 commit 3446638
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 1 deletion.
60 changes: 60 additions & 0 deletions FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# 🙋 FAQ <!-- omit in toc -->

> Please open an issue if you'd like something addressed here
## Table of contents <!-- omit in toc -->

- [👩‍👧 What is the relationship of Helia to js-ipfs?](#-what-is-the-relationship-of-helia-to-js-ipfs)
- [🤝 How does Helia guarantee compatibility with Kubo and other IPFS implementations?](#-how-does-helia-guarantee-compatibility-with-kubo-and-other-ipfs-implementations)
- [🏎️ How does it perform compared to other implementations including js-ipfs?](#️-how-does-it-perform-compared-to-other-implementations-including-js-ipfs)
- [Garbage collection](#garbage-collection)

### 👩‍👧 What is the relationship of Helia to js-ipfs?

[IPFS] is a suite of specifications and tools that concern data addressing and transfer. Historically it's also been the name of two applications that implement those protocols in Go ([Kubo]) and JavaScript ([js-ipfs]).

With [Filecoin] development, [Protocol Labs] found that progress towards the goal of "one protocol multiple implementations" was smoother when implementations did not contain the word "Filecoin" as by including that term, people consciously or unconsciously assume that one project is somehow "blessed", favoured or otherwise more important than another.

So in [late 2021](https://github.com/ipfs/ipfs/issues/470) a plan was enacted to remove the word "IPFS" from go-ipfs and js-ipfs and free up the space for multiple alternative implementations, which would be free to innovate on their own terms and perhaps specialize for certain tasks or environments.

go-ipfs was renamed [Kubo] and carried on as usual, but for js-ipfs we wanted to take the opportunity to have another look at what an implementation of IPFS in JS could look like and to apply learnings from the previous years of development.

The result of this is Helia - a new implementation of IPFS in JavaScript that is designed to be more modular and lightweight than js-ipfs which focusses on the most important use cases of IPFS in JavaScript.

It shares some internal components with js-ipfs - [libp2p], [bitswap] etc but has a [redesigned API](https://ipfs.github.io/helia/interfaces/_helia_interface.Helia.html) that will enable the next generation of distributed applications.

[js-ipfs is being retired in favour of Helia](https://github.com/ipfs/js-ipfs/issues/4336). Read more about the [thought processes](./MANIFESTO.md) that informed Helia's design, check out the [examples](https://github.com/ipfs-examples/helia-examples) and start porting your application today!

### 🤝 How does Helia guarantee compatibility with Kubo and other IPFS implementations?

Each Helia component has an interop suite that tests compatibility with other IPFS implementations. These tests run during CI as part of each PR and before a release.

Initially they test compatibility with Kubo but if you maintain another IPFS implementation please open an issue or a PR to get added to the test matrix.

See:

* [helia interop](./packages/interop)
* [@helia/ipns interop](https://github.com/ipfs/helia-ipns/tree/main/packages/interop)
* [@helia/unixfs interop](https://github.com/ipfs/helia-unixfs/tree/main/packages/interop)

Other modules should implement an interop suite which can be linked to from here.

### 🏎️ How does it perform compared to other implementations including js-ipfs?

For the areas that have been benchmarked, very favourably.

There is a [benchmarking suite](./benchmarks) in this repository which will be extended to cover most functional areas such as [data transfer](https://github.com/ipfs/helia/issues/88).

#### Garbage collection

Helia uses reference counting for garbage collection. This has proven to be much more scalable than the approaches taken by js-ipfs or Kubo.

Please see [#36](https://github.com/ipfs/helia/pull/36#issuecomment-1441403221) for graphs and discussion of the results.

[ipfs]: https://ipfs.io
[js-ipfs]: https://github.com/ipfs/js-ipfs
[kubo]: https://github.com/ipfs/kubo
[filecoin]: https://filecoin.io
[Protocol Labs]: https://protocol.ai
[libp2p]: https://github.com/libp2p/js-libp2p
[bitswap]: https://github.com/ipfs/js-ipfs-bitswap
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

A lean, modular, and modern implementation of IPFS for the prolific JS and browser environments.

See the [Manifesto](./MANIFESTO.md) and the [State of IPFS in JS blog post from October 2022](https://blog.ipfs.tech/state-of-ipfs-in-js/) for more info.
See the [Manifesto](./MANIFESTO.md), the [FAQ](./FAQ.md), and the [State of IPFS in JS blog post from October 2022](https://blog.ipfs.tech/state-of-ipfs-in-js/) for more info.

## 🏃‍♀️ Getting Started

Expand Down

0 comments on commit 3446638

Please sign in to comment.