{"id":13559356,"url":"https://github.com/ipfs/helia","last_synced_at":"2026-04-13T09:01:13.057Z","repository":{"id":64855512,"uuid":"557409374","full_name":"ipfs/helia","owner":"ipfs","description":"An implementation of IPFS in TypeScript","archived":false,"fork":false,"pushed_at":"2026-04-09T08:43:37.000Z","size":13553,"stargazers_count":1308,"open_issues_count":48,"forks_count":145,"subscribers_count":22,"default_branch":"main","last_synced_at":"2026-04-10T07:41:17.297Z","etag":null,"topics":["ipfs","ipfs-helia"],"latest_commit_sha":null,"homepage":"https://helia.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipfs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":"FUNDING.json","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{}},"created_at":"2022-10-25T16:27:56.000Z","updated_at":"2026-04-09T10:34:29.000Z","dependencies_parsed_at":"2026-02-12T11:03:16.352Z","dependency_job_id":null,"html_url":"https://github.com/ipfs/helia","commit_stats":{"total_commits":641,"total_committers":32,"mean_commits":20.03125,"dds":0.5709828393135725,"last_synced_commit":"342375049a542a584972f7a3c6de6010b804f7d7"},"previous_names":[],"tags_count":758,"template":false,"template_full_name":null,"purl":"pkg:github/ipfs/helia","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Fhelia","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Fhelia/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Fhelia/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Fhelia/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipfs","download_url":"https://codeload.github.com/ipfs/helia/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipfs%2Fhelia/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31636310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ipfs","ipfs-helia"],"created_at":"2024-08-01T13:00:19.801Z","updated_at":"2026-04-13T09:01:13.005Z","avatar_url":"https://github.com/ipfs.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Packages","包","Torrent Clients \u0026 P2P","Apps"],"sub_categories":["Mad science","黑科技"],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ipfs/helia\" title=\"Helia\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/ipfs/helia/main/assets/helia.png\" alt=\"Helia logo\" width=\"300\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n[![ipfs.tech](https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square)](https://ipfs.tech)\n[![Discuss](https://img.shields.io/discourse/https/discuss.ipfs.tech/posts.svg?style=flat-square)](https://discuss.ipfs.tech)\n[![codecov](https://img.shields.io/codecov/c/github/ipfs/helia.svg?style=flat-square)](https://codecov.io/gh/ipfs/helia)\n[![CI](https://img.shields.io/github/actions/workflow/status/ipfs/helia/main.yml?branch=main\\\u0026style=flat-square)](https://github.com/ipfs/helia/actions/workflows/main.yml?query=branch%3Amain)\n\n[Helia](https://github.com/ipfs/helia) is a lean, modular, and modern TypeScript implementation of IPFS for the prolific JS and browser environments.\n\nSee the [Manifesto](https://github.com/ipfs/helia/wiki/Manifesto), the [FAQ](https://github.com/ipfs/helia/wiki/FAQ), and the [State of IPFS in JS blog post from October 2022](https://blog.ipfs.tech/state-of-ipfs-in-js/) for more info.\n\n# 🌟 Usage\n\nA quick overview of how to get different types of data in and out of your Helia\nnode.\n\n## 🪢 Strings\n\nYou can use the [@helia/strings](https://www.npmjs.com/package/@helia/strings)\nmodule to easily add and get strings from your Helia node:\n\n```js\nimport { createHelia } from 'helia'\nimport { strings } from '@helia/strings'\n\nconst helia = await createHelia()\nconst s = strings(helia)\n\nconst myImmutableAddress = await s.add('hello world')\n\nconsole.log(await s.get(myImmutableAddress))\n// hello world\n```\n\n## 🌃 JSON\n\nThe [@helia/json](https://www.npmjs.com/package/@helia/json) module lets you add\nor get plain JS objects:\n\n```js\nimport { createHelia } from 'helia'\nimport { json } from '@helia/json'\n\nconst helia = await createHelia()\nconst j = json(helia)\n\nconst myImmutableAddress = await j.add({ hello: 'world' })\n\nconsole.log(await j.get(myImmutableAddress))\n// { hello: 'world' }\n```\n\n## 🌠 DAG-JSON\n\nThe [@helia/dag-json](https://www.npmjs.com/package/@helia/dag-json) allows you\nto store references to linked objects as\n[CIDs](https://docs.ipfs.tech/concepts/content-addressing):\n\n```js\nimport { createHelia } from 'helia'\nimport { dagJson } from '@helia/dag-json'\n\nconst helia = await createHelia()\nconst d = dagJson(helia)\n\nconst object1 = { hello: 'world' }\nconst myImmutableAddress1 = await d.add(object1)\n\nconst object2 = { link: myImmutableAddress1 }\nconst myImmutableAddress2 = await d.add(object2)\n\nconst retrievedObject = await d.get(myImmutableAddress2)\nconsole.log(retrievedObject)\n// { link: CID(baguqeerasor...) }\n\nconsole.log(await d.get(retrievedObject.link))\n// { hello: 'world' }\n```\n\n## 🌌 DAG-CBOR\n\n[@helia/dag-cbor](https://www.npmjs.com/package/@helia/dag-cbor) works in a\nsimilar way to `@helia/dag-json` but stores objects using\n[Concise Binary Object Representation](https://cbor.io/):\n\n```js\nimport { createHelia } from 'helia'\nimport { dagCbor } from '@helia/dag-cbor'\n\nconst helia = await createHelia()\nconst d = dagCbor(helia)\n\nconst object1 = { hello: 'world' }\nconst myImmutableAddress1 = await d.add(object1)\n\nconst object2 = { link: myImmutableAddress1 }\nconst myImmutableAddress2 = await d.add(object2)\n\nconst retrievedObject = await d.get(myImmutableAddress2)\nconsole.log(retrievedObject)\n// { link: CID(baguqeerasor...) }\n\nconsole.log(await d.get(retrievedObject.link))\n// { hello: 'world' }\n```\n\n## 🔒 Custom Hasher\n\nA [hasher](https://github.com/multiformats/js-multiformats?tab=readme-ov-file#multihash-hashers) is used to determine the immutable address of the content (aka the [**CID**](https://github.com/multiformats/cid?tab=readme-ov-file#what-is-it)) being imported into helia. The default hasher used by the methods above is [sha2-256 multihash](https://github.com/multiformats/js-multiformats?tab=readme-ov-file#multihash-hashers-1), but others can be provided with [AddOptions](https://ipfs.github.io/helia/interfaces/_helia_dag_cbor.AddOptions.html). This is useful for applications that require hashers with specific properties; so in most cases keeping the default is recommended.\n\n\u003e **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.**\n\n```js\nimport { createHelia } from 'helia'\nimport { dagCbor } from '@helia/dag-cbor'\nimport { sha512 } from 'multiformats/hashes/sha2'\n\nconst helia = await createHelia()\nconst d = dagCbor(helia)\n\nconst object1 = { hello: 'world' }\n\nconst cidWithSHA256 = await d.add(object1)\nconst cidWithSHA512 = await d.add(object1, {\n  hasher: sha512\n})\n\n/** The same objects with different CIDs are treated as different objects */\n\nconsole.log(cidWithSHA256)\n// CID(bafyreidykglsfhoixmivffc5uwhcgshx4j465xwqntbmu43nb2dzqwfvae)\nconsole.log(cidWithSHA512)\n// CID(bafyrgqhai26anf3i7pips7q22coa4sz2fr4gk4q4sqdtymvvjyginfzaqewveaeqdh524nsktaq43j65v22xxrybrtertmcfxufdam3da3hbk)\n\nconst retrievedObject1 = await d.get(cidWithSHA256)\nconst retrievedObject2 = await d.get(cidWithSHA512)\n\nconsole.log(retrievedObject1)\n// { hello: 'world' }\nconsole.log(retrievedObject2)\n// { hello: 'world' }\n```\n\n# 🐾 Next steps\n\nCheck out the [helia-examples](https://github.com/ipfs-examples/helia-examples)\nrepo for how to do mostly anything with your Helia node.\n\n# 🏃‍♀️ Getting Started\n\nCheck out the [Helia examples repo](https://github.com/ipfs-examples/helia-examples#examples), which covers a wide variety of use cases. If you feel something has been missed, follow the [contribution guide](https://github.com/ipfs-examples/helia-examples#contributing) and create a PR to the examples repo.\n\n# 📗 Project Docs\n\n- See the [project wiki](https://github.com/ipfs/helia/wiki).\n\n# 📒 API Docs\n\n- \u003chttps://ipfs.github.io/helia\u003e\n\n# 📐 System diagram\n\n```mermaid\ngraph TD;\n    User[\"User or application\"]--\u003eIPNS[\"@helia/ipns\"];\n    User--\u003eUnixFS[\"@helia/unixfs\"];\n    User--\u003eLibp2p;\n    User--\u003eDatastore;\n    User--\u003eBlockstore;\n    UnixFS--\u003eBlockstore;\n    IPNS--\u003eDatastore;\n    subgraph helia [Helia]\n      Datastore\n      Blockstore--\u003eBlockBrokers;\n      BlockBrokers--\u003eBitswap;\n      BlockBrokers--\u003eTrustlessGateways;\n      Libp2p--\u003eDHT;\n      Libp2p--\u003ePubSub;\n      Libp2p--\u003eIPNI;\n      Libp2p--\u003eReframe;\n    end\n    Blockstore--\u003eBlockStorage[\"File system/IDB/S3/etc\"];\n    Datastore--\u003eDataStorage[\"Level/S3/IDB/etc\"];\n    Bitswap--\u003eNetwork;\n    TrustlessGateways--\u003eGateway1;\n    TrustlessGateways--\u003eGatewayN;\n    DHT--\u003eNetwork;\n    PubSub--\u003eNetwork;\n    IPNI--\u003eNetwork;\n    Reframe--\u003eNetwork;\n```\n\n# 🏭 Code Structure\n\nHelia embraces a modular approach and encourages users to bring their own implementations of various APIs to suit their needs.\n\nThe basic Helia API is defined in:\n\n- [`/packages/interface`](./packages/interface) The Helia API\n\nThe API is implemented by:\n\n- [`/packages/helia`](./packages/helia) An peer to peer implementation that uses [bitswap](https://docs.ipfs.tech/concepts/bitswap/), [libp2p](https://www.npmjs.com/package/libp2p) and [HTTP gateways](https://docs.ipfs.tech/reference/http/gateway/) as fallback\n- [`/packages/http`](./packages/http) A lightweight implementation that uses [HTTP gateways](https://docs.ipfs.tech/reference/http/gateway/) exclusively\n\nHelia 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.\n\nThese 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:\n\n- [./packages/car](./packages/car) The `@helia/car` module\n- [./packages/dag-cbor](./packages/dag-cbor) The `@helia/dag-cbor` module\n- [./packages/dag-json](./packages/dag-json) The `@helia/dag-json` module\n- [./packages/ipns](./packages/ipns) The `@helia/ipns` module\n- [./packages/json](./packages/json) The `@helia/json` module\n- [./packages/mfs](./packages/mfs) The `@helia/mfs` module\n- [./packages/strings](./packages/strings) The `@helia/strings` module\n- [./packages/unixfs](./packages/unixfs) The `@helia/unixfs` module\n\nAn interop suite ensures everything is compatible:\n\n- [`/packages/interop`](./packages/interop) Interop tests for Helia\n\n## Other modules\n\nThere are several other modules available outside this repo:\n\n- [`@helia/verified-fetch`](https://github.com/ipfs/helia-verified-fetch) A [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)-like API for retrieving trustless, verified content from the distributed web\n- [`@helia/delegated-routing-v1-http-api`](https://github.com/ipfs/helia-delegated-routing-v1-http-api) An implementation of the [Delegated Routing v1 HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) including a server and a client\n- [Helia WNFS](https://github.com/shovelers/helia-wnfs) a [WNFS](https://guide.fission.codes/developers/webnative/file-system-wnfs) implementation built on top of Helia\n- [`@helia/remote-pinning`](https://github.com/ipfs/helia-remote-pinning) A Helia client for communicating with [IPFS Pinning Services](https://ipfs.github.io/pinning-services-api-spec/)\n- [`@helia/http-gateway`](https://github.com/ipfs/helia-http-gateway) An implementation of the [IPFS HTTP Gateway API](https://docs.ipfs.tech/concepts/ipfs-gateway/#gateway-types) built with Helia\n\n# 📣 Project status\n\nHelia v1 shipped in 202303 (see [releases](https://github.com/ipfs/helia/releases)), and development keeps on trucking as we work on initiatives in the [roadmap](#roadmap) and make performance improvements and bug fixes along the way.\n\n## Release Process\n\nFor information about our release process, please see our [release process wiki](https://github.com/ipfs/helia/wiki/Development-and-Release-Process#how-helia-is-released).\n\n# 🛣️ Roadmap\n\nPlease find and comment on [the Roadmap here](https://github.com/ipfs/helia/issues/5).\n\n# 👫 Get involved\n\n- Watch our Helia Demo Day presentations [here](https://www.youtube.com/playlist?list=PLuhRWgmPaHtQAnt8INOe5-kV9TLVaUJ9v)\n- We are sharing about the progress at periodic [Helia Demos](https://lu.ma/helia).  This is a good place to find out the latest and learn of ways to get involved.  We'd love to see you there!\n- Pick up one of the [issues](https://github.com/ipfs/helia/issues).\n- Come chat in Filecoin Slack #ip-js.  (Yes, we should bridge this to other chat environments.  Please comment [here](https://github.com/ipfs/helia/issues/33) if you'd like this.)\n\n# 🤲 Contribute\n\nContributions welcome! Please check out [the issues](https://github.com/ipfs/helia/issues).\n\nAlso see our [contributing document](https://github.com/ipfs/community/blob/master/CONTRIBUTING_JS.md) for more information on how we work, and about contributing in general.\n\nPlease be aware that all interactions related to this repo are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nUnless 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.\n\n[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)\n\n# 🛍️ Notable Consumers/Users\n\n- See [Projects using Helia](https://github.com/ipfs/helia/wiki/Projects-using-Helia).\n\n# 🌞 Branding\n\n- See [Branding](https://github.com/ipfs/helia/wiki/Branding).\n\n# 🪪 License\n\nLicensed under either of\n\n- Apache 2.0, ([LICENSE-APACHE](https://github.com/ipfs/helia/blob/main/LICENSE-APACHE) / \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT ([LICENSE-MIT](https://github.com/ipfs/helia/blob/main/LICENSE-MIT) / \u003chttp://opensource.org/licenses/MIT\u003e)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs%2Fhelia","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipfs%2Fhelia","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipfs%2Fhelia/lists"}