The JavaScript implementation of the IPFS protocol
Upgrading from <=0.40 to 0.48? See the release notes for the list of API changes and the migration guide.
We've come a long way, but this project is still in Alpha, lots of development is happening, APIs might change, beware of 🐉..
Getting started
- Read the docs
- Ensure CORS is correctly configured for use with the HTTP client
- Look into the examples to learn how to spawn an IPFS node in Node.js and in the Browser
- Consult the Core API docs to see what you can do with an IPFS node
- Head over to https://proto.school to take the IPFS course that covers core IPFS concepts and JS APIs
- Check out https://docs.ipfs.io for glossary, tips, how-tos and more
- See https://blog.ipfs.io for news and more
- Need help? Please ask 'How do I?' questions on https://discuss.ipfs.io
Table of Contents
Getting Started
Install as a CLI user
Installing ipfs
globally will give you the jsipfs
command which you can use to start a daemon running:
$ npm install -g ipfs
$ jsipfs daemon
Initializing IPFS daemon...
js-ipfs version: x.x.x
System version: x64/darwin
Node.js version: x.x.x
Swarm listening on /ip4/127.0
.... more output
You can then add a file:
$ jsipfs add ./hello-world.txt
added QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf hello-world.txt
Install as an application developer
If you do not need to run a command line daemon, use the ipfs-core
package - it has all the features of ipfs
but in a lighter package:
$ npm install ipfs-core
Then start a node in your app:
import * as IPFS from 'ipfs-core'
const ipfs = await IPFS.create()
const { cid } = await ipfs.add('Hello world')
console.info(cid)
// QmXXY5ZxbtuYj6DnfApLiGstzPN7fvSyigrRee3hDWPCaf
Documentation
Structure
This project is broken into several modules, their purposes are:
/packages/interface-ipfs-core
Tests to ensure adherence of an implementation to the spec/packages/ipfs
An aggregator module that bundles the core implementation, the CLI, HTTP API server and daemon/packages/ipfs-cli
A CLI to the core implementation/packages/ipfs-core
The core implementation/packages/ipfs-core-types
Typescript definitions for the core API/packages/ipfs-core-utils
Helpers and utilities common to core and the HTTP RPC API client/packages/ipfs-daemon
Run js-IPFS as a background daemon/packages/ipfs-grpc-client
A gRPC client for js-IPFS/packages/ipfs-grpc-protocol
Shared module between the gRPC client and server/packages/ipfs-grpc-server
A gRPC-over-websockets server for js-IPFS/packages/ipfs-http-client
A client for the RPC-over-HTTP API presented by both js-ipfs and go-ipfs/packages/ipfs-http-server
JS implementation of the IPFS RPC HTTP API/packages/ipfs-http-gateway
JS implementation of the IPFS HTTP Gateway/packages/ipfs-http-response
Creates a HTTP response for a given IPFS Path/packages/ipfs-message-port-client
A client for the RPC-over-message-port API presented by js-ipfs running in a shared worker/packages/ipfs-message-port-protocol
Code shared by the message port client & server/packages/ipfs-message-port-server
The server that receives requests from ipfs-message-port-client
Packages
List of the main packages that make up the IPFS ecosystem.
Package | Version | Deps | CI/Travis | Coverage | Lead Maintainer |
---|---|---|---|---|---|
Files | |||||
ipfs-unixfs |
Alex Potsides | ||||
Repo | |||||
ipfs-repo |
Alex Potsides | ||||
ipfs-repo-migrations |
N/A | ||||
Exchange | |||||
ipfs-bitswap |
Dirk McCormick | ||||
IPNS | |||||
ipns |
Vasco Santos | ||||
Generics/Utils | |||||
ipfs-utils |
Hugo Dias | ||||
ipfs-http-client |
Alex Potsides | ||||
ipfs-http-response |
Vasco Santos | ||||
ipfsd-ctl |
Hugo Dias | ||||
is-ipfs |
Marcin Rataj | ||||
aegir |
Hugo Dias | ||||
libp2p | |||||
libp2p |
Jacob Heun | ||||
peer-id |
Vasco Santos | ||||
libp2p-crypto |
Jacob Heun | ||||
libp2p-floodsub |
Vasco Santos | ||||
libp2p-gossipsub |
Cayman Nava | ||||
libp2p-kad-dht |
Vasco Santos | ||||
libp2p-mdns |
Jacob Heun | ||||
libp2p-bootstrap |
Vasco Santos | ||||
@chainsafe/libp2p-noise |
N/A | ||||
libp2p-tcp |
Jacob Heun | ||||
libp2p-webrtc-star |
Vasco Santos | ||||
libp2p-websockets |
Jacob Heun | ||||
libp2p-mplex |
Vasco Santos | ||||
libp2p-delegated-content-routing |
Jacob Heun | ||||
libp2p-delegated-peer-routing |
Jacob Heun | ||||
IPLD | |||||
@ipld/dag-pb |
N/A | ||||
@ipld/dag-cbor |
N/A | ||||
Multiformats | |||||
multiformats |
N/A | ||||
mafmt |
Vasco Santos | ||||
multiaddr |
Jacob Heun |
This table is generated using the module
package-table
withpackage-table --data=package-list.json
.
Want to hack on IPFS?
The IPFS implementation in JavaScript needs your help! There are a few things you can do right now to help out:
Read the Code of Conduct and JavaScript Contributing Guidelines.
- Check out existing issues The issue list has many that are marked as 'help wanted' or 'difficulty:easy' which make great starting points for development, many of which can be tackled with no prior IPFS knowledge
- Look at the IPFS Roadmap This are the high priority items being worked on right now
- Perform code reviews More eyes will help a. speed the project along b. ensure quality, and c. reduce possible future bugs.
- Add tests. There can never be enough tests.
- Join the Weekly Core Implementations Call it's where everyone discusses what's going on with IPFS and what's next