ProductPromotion
Logo

Node.JS

made by https://0x3d.site

GitHub - ipfs/helia: An implementation of IPFS in JavaScript
An implementation of IPFS in JavaScript. Contribute to ipfs/helia development by creating an account on GitHub.
Visit Site

GitHub - ipfs/helia: An implementation of IPFS in JavaScript

GitHub - ipfs/helia: An implementation of IPFS in JavaScript

ipfs.tech Discuss codecov CI

Helia is a lean, modular, and modern TypeScript implementation of IPFS for the prolific JS and browser environments.

See the Manifesto, the FAQ, and the State of IPFS in JS blog post from October 2022 for more info.

🌟 Usage

A quick overview of how to get different types of data in and out of your Helia node.

🪢 Strings

You can use the @helia/strings module to easily add and get strings from your Helia node:

import { createHelia } from 'helia'
import { strings } from '@helia/strings'

const helia = await createHelia()
const s = strings(helia)

const myImmutableAddress = await s.add('hello world')

console.log(await s.get(myImmutableAddress))
// hello world

🌃 JSON

The @helia/json module lets you add or get plain JS objects:

import { createHelia } from 'helia'
import { json } from '@helia/json'

const helia = await createHelia()
const j = json(helia)

const myImmutableAddress = await j.add({ hello: 'world' })

console.log(await j.get(myImmutableAddress))
// { hello: 'world' }

🌠 DAG-JSON

The @helia/dag-json allows you to store references to linked objects as CIDs:

import { createHelia } from 'helia'
import { dagJson } from '@helia/dag-json'

const helia = await createHelia()
const d = dagJson(helia)

const object1 = { hello: 'world' }
const myImmutableAddress1 = await d.add(object1)

const object2 = { link: myImmutableAddress1 }
const myImmutableAddress2 = await d.add(object2)

const retrievedObject = await d.get(myImmutableAddress2)
console.log(retrievedObject)
// { link: CID(baguqeerasor...) }

console.log(await d.get(retrievedObject.link))
// { hello: 'world' }

🌌 DAG-CBOR

@helia/dag-cbor works in a similar way to @helia/dag-json but stores objects using Concise Binary Object Representation:

import { createHelia } from 'helia'
import { dagCbor } from '@helia/dag-cbor'

const helia = await createHelia()
const d = dagCbor(helia)

const object1 = { hello: 'world' }
const myImmutableAddress1 = await d.add(object1)

const object2 = { link: myImmutableAddress1 }
const myImmutableAddress2 = await d.add(object2)

const retrievedObject = await d.get(myImmutableAddress2)
console.log(retrievedObject)
// { link: CID(baguqeerasor...) }

console.log(await d.get(retrievedObject.link))
// { hello: 'world' }

🔒 Custom Hasher

A hasher is used to determine the immutable address of the content (aka the CID) being imported into helia. The default hasher used by the methods above is sha2-256 multihash, but others can be provided with AddOptions. This is useful for applications that require hashers with specific properties; so in most cases keeping the default is recommended.

Changing the hasher will cause a different CID to be returned for the same content! In other words: the same content imported with different hashers is treated like unique content with a unique address.

import { createHelia } from 'helia'
import { dagCbor } from '@helia/dag-cbor'
import { sha512 } from 'multiformats/hashes/sha2'

const helia = await createHelia()
const d = dagCbor(helia)

const object1 = { hello: 'world' }

const cidWithSHA256 = await d.add(object1)
const cidWithSHA512 = await d.add(object1, {
  hasher: sha512
})

/** The same objects with different CIDs are treated as different objects */

console.log(cidWithSHA256)
// CID(bafyreidykglsfhoixmivffc5uwhcgshx4j465xwqntbmu43nb2dzqwfvae)
console.log(cidWithSHA512)
// CID(bafyrgqhai26anf3i7pips7q22coa4sz2fr4gk4q4sqdtymvvjyginfzaqewveaeqdh524nsktaq43j65v22xxrybrtertmcfxufdam3da3hbk)

const retrievedObject1 = await d.get(cidWithSHA256)
const retrievedObject2 = await d.get(cidWithSHA512)

console.log(retrievedObject1)
// { hello: 'world' }
console.log(retrievedObject2)
// { hello: 'world' }

🐾 Next steps

Check out the helia-examples repo for how to do mostly anything with your Helia node.

🏃‍♀️ Getting Started

Check out the Helia examples repo, which covers a wide variety of use cases. If you feel something has been missed, follow the contribution guide and create a PR to the examples repo.

📗 Project Docs

📒 API Docs

📐 System diagram

graph TD;
    User["User or application"]-->IPNS["@helia/ipns"];
    User-->UnixFS["@helia/unixfs"];
    User-->Libp2p;
    User-->Datastore;
    User-->Blockstore;
    UnixFS-->Blockstore;
    IPNS-->Datastore;
    subgraph helia [Helia]
      Datastore
      Blockstore-->BlockBrokers;
      BlockBrokers-->Bitswap;
      BlockBrokers-->TrustlessGateways;
      Libp2p-->DHT;
      Libp2p-->PubSub;
      Libp2p-->IPNI;
      Libp2p-->Reframe;
    end
    Blockstore-->BlockStorage["File system/IDB/S3/etc"];
    Datastore-->DataStorage["Level/S3/IDB/etc"];
    Bitswap-->Network;
    TrustlessGateways-->Gateway1;
    TrustlessGateways-->GatewayN;
    DHT-->Network;
    PubSub-->Network;
    IPNI-->Network;
    Reframe-->Network;

🏭 Code Structure

Helia embraces a modular approach and encourages users to bring their own implementations of various APIs to suit their needs.

The basic Helia API is defined in:

The API is implemented by:

Helia also ships a number of supplemental libraries and tools that can be combined with Helia API implementations to accomplish tasks in distributed and trustless ways.

These libraries are not intended to be the "one true implementation" of any given API, but are made available for users to include depending on the need of their particular application:

An interop suite ensures everything is compatible:

Other modules

There are several other modules available outside this repo:

📣 Project status

Helia v1 shipped in 202303 (see releases), and development keeps on trucking as we work on initiatives in the roadmap and make performance improvements and bug fixes along the way.

Release Process

For information about our release process, please see our release process wiki.

🛣️ Roadmap

Please find and comment on the Roadmap here.

👫 Get involved

  • Watch our Helia Demo Day presentations here
  • We are sharing about the progress at periodic Helia Demos. This is a good place to find out the latest and learn of ways to get involved. We'd love to see you there!
  • Pick up one of the issues.
  • Come chat in Filecoin Slack #ip-js. (Yes, we should bridge this to other chat environments. Please comment here if you'd like this.)

🤲 Contribute

Contributions welcome! Please check out the issues.

Also see our contributing document for more information on how we work, and about contributing in general.

Please be aware that all interactions related to this repo are subject to the IPFS Code of Conduct.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

🛍️ Notable Consumers/Users

🌞 Branding

🪪 License

Licensed under either of

Articles
to learn more about the nodejs concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about NodeJS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory