IPFS implementation in JavaScript

Overview

IPFS in JavaScript logo

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

Lead Maintainer

Alex Potsides

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:

const IPFS = require('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

List of the main packages that make up the IPFS ecosystem.

Package Version Deps CI/Travis Coverage Lead Maintainer
Files
ipfs-unixfs-exporter npm Deps Travis CI codecov Alex Potsides
ipfs-unixfs-importer npm Deps Travis CI codecov Alex Potsides
ipfs-unixfs npm Deps Travis CI codecov Alex Potsides
Repo
ipfs-repo npm Deps Travis CI codecov Alex Potsides
Exchange
ipfs-block-service npm Deps Travis CI codecov Volker Mische
ipfs-block npm Deps Travis CI codecov Volker Mische
ipfs-bitswap npm Deps Travis CI codecov Dirk McCormick
IPNS
ipns npm Deps Travis CI codecov Vasco Santos
Generics/Utils
ipfs-utils npm Deps Travis CI codecov Hugo Dias
ipfs-http-client npm Deps Travis CI codecov Alex Potsides
ipfs-http-response npm Deps Travis CI codecov Vasco Santos
ipfsd-ctl npm Deps Travis CI codecov Hugo Dias
is-ipfs npm Deps Travis CI codecov Marcin Rataj
aegir npm Deps Travis CI codecov Hugo Dias
ipfs-repo-migrations npm Deps Travis CI codecov N/A
libp2p
libp2p npm Deps Travis CI codecov Jacob Heun
peer-id npm Deps Travis CI codecov Vasco Santos
libp2p-crypto npm Deps Travis CI codecov Jacob Heun
libp2p-floodsub npm Deps Travis CI codecov Vasco Santos
libp2p-gossipsub npm Deps Travis CI codecov Cayman Nava
libp2p-kad-dht npm Deps Travis CI codecov Vasco Santos
libp2p-mdns npm Deps Travis CI codecov Jacob Heun
libp2p-bootstrap npm Deps Travis CI codecov Vasco Santos
libp2p-noise npm Deps Travis CI codecov N/A
libp2p-tcp npm Deps Travis CI codecov Jacob Heun
libp2p-webrtc-star npm Deps Travis CI codecov Vasco Santos
libp2p-websockets npm Deps Travis CI codecov Jacob Heun
libp2p-mplex npm Deps Travis CI codecov Vasco Santos
libp2p-delegated-content-routing npm Deps Travis CI codecov Jacob Heun
libp2p-delegated-peer-routing npm Deps Travis CI codecov Jacob Heun
IPLD
ipld npm Deps Travis CI codecov Volker Mische
ipld-dag-pb npm Deps Travis CI codecov Volker Mische
ipld-dag-cbor npm Deps Travis CI codecov Volker Mische
Multiformats
multihashing npm Deps Travis CI codecov Hugo Dias
mafmt npm Deps Travis CI codecov Vasco Santos
multiaddr npm Deps Travis CI codecov Jacob Heun
multihashes npm Deps Travis CI codecov David Dias

This table is generated using the module package-table with package-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

License

FOSSA Status

Comments
  • feat: Circuit Relay

    feat: Circuit Relay

    Remaining tasks:

    • [x] Fix Node.js tests
    • [x] update ipfsd-ctl to support spawning js and go nodes
    • [x] add ability to ipfsd-ctl to spawn remote js and go nodes to enable browser testing
    • [x] Add a test for Relay On without having any transport attached. Caught a big hairy bug here https://github.com/ipfs/js-ipfs/pull/1072#issuecomment-343730826
    • [x] Complete interop tests in https://github.com/ipfs/interop/pull/6
    • [x] Add documentation on how to enable Relay
    exp/wizard P0 
    opened by dryajov 58
  • feat: pin

    feat: pin

    • [x] core
      • [x] add
      • [x] rm
      • [x] ls
      • [x] isPinned
      • [x] isPinnedWithType
      • [x] directKeys / recursiveKeys / internalKeys
      • [x] flush (persist keys to datastore)
      • [x] load (restore keys from datastore)
    • [x] cli
      • [x] add
      • [x] rm
      • [x] ls
    • [x] http
      • [x] add
      • [x] rm
      • [x] ls

    Updated core interface to align with interface-ipfs-core, still need to update cli and http.

    P0 
    opened by AdamStone 49
  • ⚡️ v0.30.0 RELEASE 🚀

    ⚡️ v0.30.0 RELEASE 🚀

    Feature parity with go-ipfs just got a whole lot closer!

    🗺 What's left for release

    🔦 Highlights

    🔀 Mutable File System (MFS)

    MFS, the mutable file system is finally here in js-ipfs. The MFS API allows you to use IPFS like a regular Unix file system. Add, edit, move, copy, rename and delete your files while keeping all that content addressable, Merkle DAGgy goodness.

    📌 Pin API implemented

    Ever wanted to keep the things you add to IPFS? Well now you can! Pinning a hash in IPFS land tells your node to keep the data around in your local repo until you decide to unpin it. No amount of garbage collection will take it! Next stop, implement garbage collection 😝

    🤝 libp2p connection manager added

    The new libp2p connection manager gives you the power to disconnect peers when you have too many or when certain bandwidth restrictions are reached. Really useful for preserving resources on resource constrained devices such as mobile phones or IoT.

    See the options at: https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager

    📇 bitswap improvements

    Swapping your bits has never been so easy to keep track of. You can now inspect the "wantlist" (the list of hashes currently wanted by various peers) on a per peer basis, and you can manually "unwant" hashes in your own list.

    ☯️ Content hashes interop

    If you add a file to go-ipfs and also add it to js-ipfs then you might get a different hash. It doesn't mean the hash is wrong, just that the layout of the DAG nodes that were created for your file was different. Good news folks, we fixed that. You should now get the same hash whether you add your file to go-ipfs or js-ipfs. Hooray \o/.

    🙅 Node.js 10 support

    Now you can run your js-ipfs node on the latest and greatest Node.js yet.

    🏗 API Changes

    • libp2p configuration property names for custom modules has changed
      • old: libp2p.modules.discovery
      • new: libp2p.modules.peerDiscovery
    • Custom libp2p modules you provide now replace default modules
    • Pin API added (spec)
    • bitswap.wantlist peer ID parameter added (spec)
    • bitswap.unwant implemented (spec)
    • MFS API added (spec)

    ✅ Release Checklist

    • Robustness and quality
    • Documentation
      • [x] Ensure that README.md is up to date
      • [x] Ensure that all the examples run
    • Communication
      • [x] Create the release issue
      • [x] Announcements (both pre-release and post-release)
      • [x] Blog post

    🙌🏽 Want to contribute?

    Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:

    • Check the issues with the help wanted label at the Ready column in our waffle board - https://waffle.io/ipfs/js-ipfs?label=help%20wanted
    • Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/pm/#all-hands-call
    • Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built
    • Join the discussion at http://discuss.ipfs.io/ and help users finding their answers.
    • Join the ⚡️ⒿⓈ Core Dev Team Weekly Sync 🙌🏽 and be part of the Sprint action!

    ⁉️ Do you have questions?

    The best place to ask your questions about IPFS, how it works and what you can do with it is at discuss.ipfs.io. We are also available at the #ipfs channel on Freenode.

    topic/release 
    opened by alanshaw 48
  • Awesome Endeavour: Async Iterators

    Awesome Endeavour: Async Iterators

    JS IPFS supports two types of stream at the API level, but uses pull streams for internals. If I was working on js-ipfs at the time I'd have made the same decision. Since then, async/await became part of the JS language and the majority of JavaScript runtimes now support async/await, async iterators and for/await/of (i.e. no need to transpile). These tools give us the power to stream data without needing to rely on a library.

    Just because there are new language features available doesn't mean we should switch to using them. It's a significant upheaval to change the core interface spec and its implementations (js-ipfs, js-ipfs-api etc.) without good reason.

    That said, it has become apparent that there are a growing number of good reasons to do this:

    • Reduction in bundle size - no need to bundle two different stream implementations, and their eco-system helper modules, no need for the async module.
    • Reduce npm install time - fewer dependencies to install.
    • Allows us to remove a bunch of plumbing code that converts Node.js streams to pull streams and vice versa.
    • Reduces API surface area, no addPullStream, addReadableStream.
    • Building an interface-ipfs-core compatible interface becomes a whole lot easier, no dual promise/callback API and no multiple stream implementation variations of the same function. It would also reduce the number of tests in the interface-ipfs-core test suite for the same reasons.
    • Node.js readable streams are now async iterators thanks to #17755!
    • Of note, it is trivial to convert from pull stream to (async) iterator and vice versa.
    • Unhandled throws that cannot be caught will no longer be a problem
    • Better stack traces, stacks no longer clipped at async boundaries, await stack traces better than promise stack traces
    • A modern, up to date and cutting edge API will aid community contributions and adoption.

    The rough plan is:

    1. Drop support for dual callback/promise based APIs
    2. Expose only APIs that return promises or iterators for async actions
    3. Use async/await over then/catch when dealing with promises

    This will require significant discussion and coordination from the JS teams. We'll need to reach agreement on the best API to expose for each module and manage releases carefully.

    Below is a table documenting the multiformats, libp2p, ipld and ipfs modules that will likely need work. I suspect that some of these modules can be removed as they do not expose an async API. Likewise there's probably modules that got missed. If you notice either way then please edit the table or comment below.

    If you'd like to own this enhancement task for a module then please comment below (or add yourself to the table if you know what you are doing). Please open a PR against the module asap (does not have to be anywhere near complete!) so we can add it here also and track progress.

    • 🍎 = Not started
    • 🍊 = In progress
    • 🍏 = Complete

    Core

    Multiformats

    • Current progress:
    • 🍏 2/2
    • 🍊 0/2
    • 🍎 0/2

    | Module | PR | Owner | Status | Priority | | ------- | -- | ----- | ------ | - | | multihashing-async | https://github.com/multiformats/js-multihashing-async/pull/37 | @hugomrdias | 🍏 | P0 | | multistream-select | https://github.com/multiformats/js-multistream-select/releases/tag/v0.15.0 | @alanshaw | 🍏 | P1 |

    libp2p

    https://github.com/libp2p/js-libp2p/issues/266

    • Current progress:
    • 🍏 25/30
    • 🍊 3/30
    • 🍎 2/30

    | Module | PR | Owner | Status | Priority | | ------- | -- | ----- | ------ | - | | peer-id | https://github.com/libp2p/js-peer-id/pull/87 | @hacdias | 🍏 | P3+ | | peer-info | https://github.com/libp2p/js-peer-info/pull/67 | @hacdias | 🍏 | P3+ | | libp2p | https://github.com/libp2p/js-libp2p/tree/refactor/async-await | @jacobheun | 🍊 | P0 | | libp2p-bootstrap | https://github.com/libp2p/js-libp2p-bootstrap/pull/89 | @dirkmc | 🍏 | P3+ | | libp2p-crypto | https://github.com/libp2p/js-libp2p-crypto/pull/131 | @alanshaw | 🍏 | P3+ | | libp2p-crypto-secp256k1 | https://github.com/libp2p/js-libp2p-crypto-secp256k1/pull/9 | @alanshaw | 🍏 | P1 | | libp2p-keychain | https://github.com/libp2p/js-libp2p-keychain/pull/37 | @jacobheun | 🍏 | P3+ | | libp2p-kad-dht | https://github.com/libp2p/js-libp2p-kad-dht/pull/148 https://github.com/libp2p/js-libp2p-kad-dht/pull/153 | @vasco-santos | 🍏 | P3+ | | libp2p-delegated-content-routing | https://github.com/libp2p/js-libp2p-delegated-content-routing/pull/7 | @achingbrain | 🍏 | P3+ | | libp2p-delegated-peer-routing | https://github.com/libp2p/js-libp2p-delegated-peer-routing/pull/8 | @achingbrain | 🍏 | P3+ | | libp2p-floodsub | https://github.com/libp2p/js-libp2p-floodsub/pull/88 | @vasco-santos | 🍏 | P3+ | | libp2p-gossipsub | https://github.com/ChainSafe/gossipsub-js/pull/49 | @vasco-santos | 🍏 | P3+ | | libp2p-pubsub | https://github.com/libp2p/js-libp2p-pubsub/pull/26 | @vasco-santos | 🍏 | P0 | | libp2p-secio | https://github.com/libp2p/js-libp2p-secio/pull/108 | @mkg20001 | 🍏 | P3+ | | libp2p-spdy | | | 🍎 | P1 | | libp2p-mplex | https://github.com/libp2p/js-libp2p-mplex/pull/94 | @alanshaw | 🍏 | P1 | | libp2p-record | https://github.com/libp2p/js-libp2p-record/pull/13 | @dirkmc | 🍏 | P1 | | libp2p-rendezvous | | | 🍎 | P3+ | | libp2p-mdns | https://github.com/libp2p/js-libp2p-mdns/pull/78 | @dirkmc | 🍏 | P3+ | | libp2p-tcp | https://github.com/libp2p/js-libp2p-tcp/pull/112 | @dirkmc + @alanshaw | 🍏 | P3+ | | libp2p-utp | https://github.com/libp2p/js-libp2p-utp/pull/81 | @vasco-santos | 🍊 | P1 | | libp2p-webrtc-direct | https://github.com/libp2p/js-libp2p-webrtc-direct/pull/30 | @vasco-santos | 🍏 | P1 | | libp2p-webrtc-star | https://github.com/libp2p/js-libp2p-webrtc-star/pull/183 | @vasco-santos | 🍏 | P3+ | | libp2p-websocket-star | https://github.com/libp2p/js-libp2p-websocket-star/pull/77 | @vasco-santos | 🍊 | P3+ | | libp2p-websocket-star-rendezvous | https://github.com/libp2p/js-libp2p-websocket-star-rendezvous/pull/35 | @achingbrain | 🍏 | P3+ | | libp2p-websockets | https://github.com/libp2p/js-libp2p-websockets/pull/92 | @alanshaw + @vasco-santos | 🍏 | P1 | | interface-connection | https://github.com/libp2p/interface-connection/pull/29 | @vasco-santos | 🍏 | P0 | | interface-transport | https://github.com/libp2p/interface-transport/pull/44 | @dirkmc | 🍏 | P0 | | interface-peer-discovery | https://github.com/libp2p/interface-peer-discovery/pull/10 | @vasco-santos | 🍏 | P0 | | interface-stream-muxer | https://github.com/libp2p/interface-stream-muxer/pull/55 | @alanshaw | 🍏 | P3+ |

    IPLD

    Please read https://github.com/ipfs/js-ipfs/issues/1670#issuecomment-453962298 before contributing.

    • Current progress:
    • 🍏 8/8
    • 🍊 0/8
    • 🍎 0/8

    | Module | PR | Owner | Status | Priority | | ------- | -- | ----- | ------ | - | | ipld | https://github.com/ipld/js-ipld/pull/190 | @vmx | 🍏 | P3+ | | ipld-bitcoin | https://github.com/ipld/js-ipld-bitcoin/pull/48 | @vmx | 🍏 | P3+ | | ipld-dag-pb | https://github.com/ipld/js-ipld-dag-pb/pull/124 | @vmx | 🍏 | P1 | | ipld-dag-cbor | https://github.com/ipld/js-ipld-dag-cbor/pull/107 | @vmx | 🍏 | P1 | | ipld-ethereum | https://github.com/ipld/js-ipld-ethereum/pull/51 | @vmx | 🍏 | P1 | | ipld-git | https://github.com/ipld/js-ipld-git/pull/51 | @vmx | 🍏 | P1 | | ipld-raw | https://github.com/ipld/js-ipld-raw/pull/32 | @vmx | 🍏 | P1 | | ipld-zcash | https://github.com/ipld/js-ipld-zcash/pull/39 | @vmx | 🍏 | P1 |

    IPFS

    • Current progress:
    • 🍏 19/19
    • 🍊 0/19
    • 🍎 0/19

    | Module | PR | Owner | Status | Priority | | ------- | -- | ----- | ------ | - | | interface-datastore | https://github.com/ipfs/interface-datastore/pull/25 | @alanshaw | 🍏 | P0 | | datastore-core | https://github.com/ipfs/js-datastore-core/pull/17 | @zcstarr | 🍏 | P1 | | datastore-fs | https://github.com/ipfs/js-datastore-fs/pull/22 | @zcstarr | 🍏 | P1 | | datastore-level | https://github.com/ipfs/js-datastore-level/pull/12 | @alanshaw | 🍏 | P2 | | datastore-pubsub | https://github.com/ipfs/js-datastore-pubsub/pull/15 | @vasco-santos | 🍏 | P3+ | | datastore-s3 | https://github.com/ipfs/js-datastore-s3/pull/17 | @dirkmc | 🍏 | P2 | | interface-ipfs-core | https://github.com/ipfs/interface-js-ipfs-core/pull/562 | @PedroMiguelSS | 🍏 | P3+ | | interop | https://github.com/ipfs/interop/pull/87 | @PedroMiguelSS | 🍏| P3+ | | ipfs | https://github.com/ipfs/js-ipfs/pull/2495 https://github.com/ipfs/js-ipfs/pull/2379 https://github.com/ipfs/js-ipfs/pull/2517 https://github.com/ipfs/js-ipfs/pull/2547 https://github.com/ipfs/js-ipfs/pull/2658 https://github.com/ipfs/js-ipfs/pull/2659 https://github.com/ipfs/js-ipfs/pull/2660 https://github.com/ipfs/js-ipfs/pull/2661 https://github.com/ipfs/js-ipfs/pull/2664 https://github.com/ipfs/js-ipfs/pull/2665 https://github.com/ipfs/js-ipfs/pull/2666 https://github.com/ipfs/js-ipfs/pull/2668 https://github.com/ipfs/js-ipfs/pull/2671 https://github.com/ipfs/js-ipfs/pull/2672 https://github.com/ipfs/js-ipfs/pull/2683 https://github.com/ipfs/js-ipfs/pull/2724 https://github.com/ipfs/js-ipfs/pull/2726 | @alanshaw / @achingbrain | 🍏 | P3+ | | ipns | https://github.com/ipfs/js-ipns/pull/19 | @dirkmc | 🍏 | P3+ | | ipfs-http-client | https://github.com/ipfs/js-ipfs-http-client/pull/1059 https://github.com/ipfs/js-ipfs-http-client/pull/1087 https://github.com/ipfs/js-ipfs-http-client/pull/1101 https://github.com/ipfs/js-ipfs-http-client/pull/1124 https://github.com/ipfs/js-ipfs-http-client/pull/1149 https://github.com/ipfs/js-ipfs-http-client/pull/1153 https://github.com/ipfs/js-ipfs-http-client/pull/1154 https://github.com/ipfs/js-ipfs-http-client/pull/1155 https://github.com/ipfs/js-ipfs-http-client/pull/1156 https://github.com/ipfs/js-ipfs-http-client/pull/1157 https://github.com/ipfs/js-ipfs-http-client/pull/1161 https://github.com/ipfs/js-ipfs-http-client/pull/1160 https://github.com/ipfs/js-ipfs-http-client/pull/1164 https://github.com/ipfs/js-ipfs-http-client/pull/1165 https://github.com/ipfs/js-ipfs-http-client/pull/1166 https://github.com/ipfs/js-ipfs-http-client/pull/1168 https://github.com/ipfs/js-ipfs-http-client/pull/1169 https://github.com/ipfs/js-ipfs-http-client/pull/1170 https://github.com/ipfs/js-ipfs-http-client/pull/1172 https://github.com/ipfs/js-ipfs-http-client/pull/1173 https://github.com/ipfs/js-ipfs-http-client/pull/1174 https://github.com/ipfs/js-ipfs-http-client/pull/1183 | @alanshaw / @achingbrain | 🍏 | P3+ | | ipfs-bitswap | https://github.com/ipfs/js-ipfs-bitswap/pull/202 | @achingbrain | 🍏 | P3+ | | ipfs-block-service | https://github.com/ipfs/js-ipfs-block-service/pull/85 | @dirkmc | 🍏 | P3+ | | ipfs-http-response | https://github.com/ipfs/js-ipfs-http-response/pull/28 | @PedroMiguelSS | 🍏 | P1 | | ipfs-mfs | https://github.com/ipfs/js-ipfs-mfs/pull/49 | @achingbrain | 🍏 | P3+ | | ipfs-multipart | https://github.com/ipfs/js-ipfs-multipart/pull/17 | @achingbrain | 🍏 | P0 | | ipfs-repo | https://github.com/ipfs/js-ipfs-repo/pull/189 | @zcstarr | 🍏 | P3+ | | ipfs-unixfs-exporter | https://github.com/ipfs/js-ipfs-unixfs-exporter/pull/21 | @achingbrain | 🍏 | P3+ | | ipfs-unixfs-importer | https://github.com/ipfs/js-ipfs-unixfs-importer/pull/24 | @achingbrain | 🍏 | P3+ |

    Dependents

    These modules use IPFS and fall under the ipfs/ipfs-shipyard umbrella so should also be updated.

    Current progress:

    • 🍏 1/44
    • 🍊 2/44
    • 🍎 40/44

    | Module | PR | Owner | Status | Priority | | --- | --- | --- | --- | --- | | awesome-ipfs | | | 🍎 | | benchmark-js.ipfs.io | | | 🍎 | | cid-utils-website | | | 🍎 | | demo-ipfs-todo | | | 🍎 | | ipfs-companion | | @lidel | 🍎 | | ipfs-desktop | | | 🍎 | | ipfs-fuse | | @alanshaw | 🍎 | | ipfs-geoip | https://github.com/ipfs/ipfs-geoip/pull/67 | @nijynot | 🍊 | P0 | | ipfs-iiif-db | | | 🍎 | | ipfs-level | | | 🍎 | | ipfs-blob-store | https://github.com/ipfs-shipyard/ipfs-blob-store/pull/26 | @niinpatel | 🍊 | P3+ | | ipfs-locations | | | 🍎 | | ipfs-performance-profiling | | | 🍎 | | ipfs-pubsub-peer-monitor | | | 🍎 | | ipfs-pubsub-room | | | 🍎 | | ipfs-pubsub-room-demo | | | 🍎 | | ipfs-redux-bundle | | | 🍎 | | ipfs-registry-mirror | | | 🍎 | | ipfs-postmsg-proxy | | @alanshaw | 🍎 | | ipfs-pubsub-1on1 | | | 🍎 | | ipfs-service-worker | | @vasco-santos | 🍎 | | ipfs-share-files | | | 🍎 | | ipfs-stats | | | 🍎 | | ipfs-webui | | | 🍎 | | ipfsd-ctl | https://github.com/ipfs/js-ipfsd-ctl/pull/353 | @achingbrain | 🍏 | | ipld-explorer | | | 🍎 | | ipld-explorer-cli | | @alanshaw | 🍎 | | ipld-explorer-components | | | 🍎 | | ipscend | | | 🍎 | | npm-on-ipfs | | @achingbrain | 🍎 | | peer-crdt-textarea-binding | | | 🍎 | | peer-flipchart | | | 🍎 | | peer-pad-core | | | 🍎 | | peer-star-app | | | 🍎 | | peer-star-network-vis | | | 🍎 | | peer-star-network-vis-react | | | 🍎 | | peer-star-peer-color | | | 🍎 | | peer-star-react | | | 🍎 | | peerpad-peer-crdt | | | 🍎 | | service-worker-gateway | | | 🍎 | | tevere | | | 🍎 | | window.ipfs-fallback | | @alanshaw | 🍎 | | y-ipfs-connector | | | 🍎 | | ipld-graph-builder | | | 🍎 | P3+ |

    status/in-progress exp/wizard help wanted awesome endeavour 
    opened by alanshaw 47
  • Track: Typescript types support

    Track: Typescript types support

    We will use JSDoc to declare types for the top level API first and internally we will add types incrementally where we feel it adds value.

    A TS config will be added to the repo to enable type declaration generation from JSDoc comments.

    Type declaration tests will be added as we see fit and we will add a ts type check job to our CI.

    Repo track list

    Done = ✅ In Progress = 🚧 TODO = ⛔ | Status | Repo/PR | Owner | | --- | --- | --- | |✅ | aegir https://github.com/ipfs/aegir/pull/671 https://github.com/ipfs/aegir/pull/701 | - | |✅ | ipfs-utils https://github.com/ipfs/js-ipfs-utils/pull/89 | - | |✅ | interface-datastore https://github.com/ipfs/interface-datastore/pull/56 | - | |✅ | datastore-core https://github.com/ipfs/js-datastore-core/pull/39 | - | |✅ | datastore-level https://github.com/ipfs/js-datastore-level/pull/53 | - | |✅ | datastore-pubsub https://github.com/ipfs/js-datastore-pubsub/pull/60 | @achingbrain | |✅ | datastore-fs https://github.com/ipfs/js-datastore-fs/pull/62 | - | |✅ | ipfs-repo https://github.com/ipfs/js-ipfs-repo/pull/275 | @hugomrdias | |✅ | ipfs-unixfs https://github.com/ipfs/js-ipfs-unixfs/pull/114 https://github.com/ipfs/js-ipfs-unixfs/pull/122 | @achingbrain | |✅ | ipfs-bitswap https://github.com/ipfs/js-ipfs-bitswap/pull/261 | @Gozala | |✅ | is-ipfs https://github.com/ipfs-shipyard/is-ipfs/pull/39 | @achingbrain | |✅ | ipns https://github.com/ipfs/js-ipns/pull/106 | @achingbrain | |✅ | ipfs-block-service https://github.com/ipfs/js-ipfs-block-service/pull/136 | @achingbrain | |✅ | cids https://github.com/multiformats/js-cid/pull/131 | - | |✅ | multihash https://github.com/multiformats/js-multihash/pull/104 | - | |✅ | multibase https://github.com/multiformats/js-multibase/pull/72 | - | |✅ | multiaddr https://github.com/multiformats/js-multiaddr/pull/159 |@hugomrdias | |✅ | multicodec https://github.com/multiformats/js-multicodec/pull/70 | - | |✅ | multihashing-async https://github.com/multiformats/js-multihashing-async/pull/92 | - | |✅ | libp2p https://github.com/libp2p/js-libp2p/pull/802 | - | |✅ | libp2p-interfaces https://github.com/libp2p/js-libp2p-interfaces | - | |⛔ | ipfsd-ctl | | |✅ | ipfs https://github.com/ipfs/js-ipfs/pull/3550 | @achingbrain | |✅ | err-code | - |

    Documentation

    https://github.com/ipfs/aegir/blob/master/md/ts-jsdoc.md

    Improvement issues

    https://github.com/ipfs/aegir/issues/619#issuecomment-732818829

    External issues to track

    https://github.com/TypeStrong/typedoc/issues/1248#issuecomment-609114750 https://github.com/microsoft/TypeScript/issues/41672

    exp/wizard awesome endeavour P0 topic/docs Epic kind/tracking 
    opened by hugomrdias 45
  • tutorial: File Exchange - Transfer files between desktop and browser using go-ipfs, js-ipfs and orbit-db

    tutorial: File Exchange - Transfer files between desktop and browser using go-ipfs, js-ipfs and orbit-db

    This is a WIP PR for the second interop example. A File Manager in the browser, which eventually will be able to display files added in go-ipfs. It currently works only between browser js-ipfs nodes.

    No need to review it yet, still working on it.

    exp/expert help wanted P1 
    opened by haadcode 43
  • Awesome WebWorkers Support

    Awesome WebWorkers Support

    Thanks to the efforts from @dryajov and @tswindell we are close to having full support for running js-ipfs in webworkers. This issue tracks the last outstanding issues for this.

    Aegir

    • [x] Merge webworkers support into aegir
    • [x] Release aegir with webworker test support

    PRs

    • [x] https://github.com/libp2p/js-libp2p-crypto/pull/61
    • [x] https://github.com/multiformats/js-multihashing-async/pull/11 and https://github.com/multiformats/js-multihashing-async/pull/12

    Others

    • [x] Enable webworker tests for all js-ipfs* repos
    • [x] Enable webworker tests for all js-libp2p* repos
    • [x] Enable webworker tests for all js-multi* repos
    help wanted awesome endeavour 
    opened by dignifiedquire 42
  • ⚡️ v0.27.0 RELEASE 🚀

    ⚡️ v0.27.0 RELEASE 🚀

    🚀 This release brings a new transport to the libp2p family, perf improvements and stability (add files with 10x the size!), Windows support, bug fixes and more! 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟

    🗺 What's left to release

    • [x] Bring back PubSub interop (with tests!) https://github.com/ipfs/js-ipfs/pull/1081
    • [x] Finish the deployment of the new rendezvous endpoints https://github.com/ipfs/js-ipfs/pull/1111
    • [x] Fix multiaddrs for *-star transports https://github.com/ipfs/js-ipfs/pull/1117
      • [x] https://github.com/libp2p/js-libp2p-webrtc-star/issues/129
      • [x] https://github.com/libp2p/js-libp2p-websocket-star/issues/37
    • [x] ~~Implement Crypto Puzzle for js-libp2p-webrtc-star - https://github.com/libp2p/js-libp2p-webrtc-star/issues/128~~ (next release)
      • [x] Fix peer-id unmarsheling of keys https://github.com/libp2p/js-peer-id/pull/72
        • [x] Fix libp2p-crypto unmarsheling of keys https://github.com/libp2p/js-libp2p-crypto/pull/113
    • [x] Deploy a websocket-star-rendezvous with CryptoPuzzle enabled

    🔦 Highlights

    🗂 The Files API has been upgraded with a new Streaming + Buffered interface

    Now you can add and fetch Files from IPFS using your favorite streams library, Readable Streams (aka Node.js Streams) or Pull Stream, you pick! Also, if you don't need to handle large files or if you are ok with buffering the whole thing, you can also use the Callback or Promises API for simplicity.

    See function signatures, descriptions and examples at: https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md

    Ref:

    • https://github.com/ipfs/interface-ipfs-core/pull/162
    • https://github.com/ipfs/js-ipfs/issues/557

    🌟 New transport! websocket-star

    js-ipfs has a new WebSockets relayed transport, a similar transport to webrtc-star but more stable (less memory hungry). With this addition, we disable webrtc by default and added instructions on how to enabled it to our FAQ so that you can pick the best transport (webrtc-star vs websocket-star) for your needs.

    Big thank you to @mkg20001 for creating websocket-star in the first place! :)

    📦 You are now able to add any directory size and depth to IPFS with the new multipart stream builder

    js-ipfs-api got a big update with https://github.com/ipfs/js-ipfs-api/pull/629, upgrading the way we constructed multipart streams to send large amounts of Files to an IPFS daemon. Thanks to this, now js-ipfs CLI can any any directory size to IPFS.

    Thanks to @pgte for shipping it in a flash!

    🏡 Windows Support

    Yeeaaas! js-ipfs now supports Windows -- https://github.com/ipfs/js-ipfs/issues/1017#issuecomment-343568369 --!! Please send a huge hi5 to @richardschneider for slaying all the dragons on this one.

    🦁 Safari Support (both Mobile and Desktop)

    This is not necessarily a 0.27 update, but it is something you can do now! What this means is that now there are two mobile browsers that can run your Distributed Applications! (Chrome on Android and Safari on iOS)

    🚥 More interop tests, including PubSub

    Out set of interoperability tests is growing to make sure that JS and Go IPFS stay compatible at all times. The biggest new addition were PubSub tests, see these and more at https://github.com/ipfs/js-ipfs/tree/master/test/interop

    👢 Bootstraper tests

    Quick bootstraper tests were added -- https://github.com/ipfs/js-ipfs/pull/899 -- so that our Infrastructure team can always check that js-ipfs is able to contact the Bootstraper and Gateways after a configuration change. This should mitigate downtime issues we observer in the past.

    ipfs.ls is now implemented!

    This was a long time coming. Thank you to @pgte for shipping this one.

    💫 ipfs file ls is now implemented too!

    You know when they say that an implementation of S3 is bug by bug compatible? Well, in our case, js-ipfs is getting command by command compatible with go-ipfs so that any app uses go-ipfs as a daemon can use js-ipfs too. This one was shipped by @richardschneider, thank you!

    📶 Progress bar!

    You can now get progress reports while adding a file to IPFS, both through the CLI (progress bar) or through the API, see how here: https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#add

    Thank you @dryajov for shipping this!

    🎢 Performance and Memory Improvements with pull-block

    @beanow improved the performance of pull-block, one of the js-ipfs-unixfs-engine dependencies, reducing vastly its memory fingerprint. What this translates too is to a faster and less memory hungry ipfs.add. I've successfully managed to added multiple files of 750Mb to a browser application using js-ipfs, this is more than a 10x improvement over previous reports!!

    ✅ Release Checklist

    • Robustness and quality
      • [x] Ensure that all tests are passing, this includes:
        • [x] unit
        • [x] interop
        • [x] sharness
      • [x] Run tests of the following projects with the new release:
        • [x] ipfs-pubsub-room
        • [x] peerpad
    • Documentation
      • [x] Ensure that README.md is up to date
      • [x] Ensure that all the examples run
    • Communication
      • [x] Create the release issue
      • [x] Announcements (both pre-release and post-release)
        • [x] Twitter
        • [x] IRC
        • [x] Reddit
      • [x] Blog post

    🙌🏽 Want to contribute?

    Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:

    • Check the issues with the help wanted label at the Ready column in our waffle board - https://waffle.io/ipfs/js-ipfs?label=help%20wanted
    • Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/pm/#all-hands-call
    • Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built
    • Join the discussion at http://discuss.ipfs.io/ and help users finding their answers.

    ⁉️ Do you have questions?

    The best place to ask your questions about IPFS, how it works and what you can do with it is at discuss.ipfs.io. We are also available at the #ipfs channel on Freenode.

    opened by daviddias 41
  • Does not work with UglifyJS version 2

    Does not work with UglifyJS version 2

    • Version: 0.25.0
    • Platform: JS
    • Subsystem:

    Type: Bug

    Severity: Critical

    Description:

    Trying to build IPFS node in the browser, uglifyJS through webpack won't build the app.

    static/js/main.725ac8bb.js from UglifyJs
    Unexpected token: name (CID) [./~/cids/src/index.js:23,0][static/js/main.725ac8bb.js:8442,6]
    

    Hey guys, I'm trying to build an IPFS node in my browser. Building the app with yarn run build using create-react-app gives the error above. It looks like it doesn't like the type CID. I've installed CID as well, but no go. Anyone know what's going on here?

    kind/bug exp/expert help wanted P1 
    opened by lightninglu10 41
  • Better error handling in daemon + gateway

    Better error handling in daemon + gateway

    Today, if there is a error in a stream or any other error within the daemon or the gateway, the entire process crashes. While not a problem for testing, it's a problem when deploying and trying to run a long-term daemon (for example, for the js-ipfs daemons).

    I raised this before in https://github.com/ipfs/js-ipfs/pull/1243

    Basically, we should be able to gracefully handle errors down the stack without having the daemon and gateway crash.

    Current issue is the following error that happens every ~10 minutes:

    /usr/src/app/node_modules/pull-pair/index.js:11
          throw new Error('already piped')
          ^
    
    Error: already piped
        at sink (/usr/src/app/node_modules/pull-pair/index.js:11:13)
        at consume (/usr/src/app/node_modules/pull-defer/sink.js:7:17)
        at consume (/usr/src/app/node_modules/pull-defer/sink.js:7:17)
        at Connection.consume (/usr/src/app/node_modules/pull-defer/sink.js:7:17)
        at pull (/usr/src/app/node_modules/pull-stream/pull.js:43:9)
        at Dialer.handle (/usr/src/app/node_modules/multistream-select/src/dialer/index.js:47:5)
        at attemptMuxerUpgrade (/usr/src/app/node_modules/libp2p-switch/src/dial.js:164:10)
        at gotWarmedUpConn (/usr/src/app/node_modules/libp2p-switch/src/dial.js:55:7)
        at Switch.dial (/usr/src/app/node_modules/libp2p-switch/src/dial.js:41:9)
        at _getPeerInfo (/usr/src/app/node_modules/libp2p/src/index.js:238:19)
    

    I'm not saying that we should (or should not) fix this particular error, but rather when this error (and similar) happens, the daemon and gateway should not die but continue running.

    exp/wizard status/ready awesome endeavour 
    opened by victorb 38
  • Windows Support

    Windows Support

    More and more users have been trying to use js-ipfs on Windows and seeing their experiments fail. This happens because, in fact, js-ipfs doesn't have Windows support at the moment.

    Reported issues:

    • https://github.com/ipfs/js-ipfs/issues/861
    • https://github.com/ipfs/js-ipfs/issues/1016

    We welcome a captain to develop Windows support for js-ipfs. It should be really close and mostly be an issue with pathing and native deps.

    P2 env:Windows 
    opened by daviddias 38
  • files.write buffering issue

    files.write buffering issue

    • Version: js-ipfs version: 0.17.0-e8b7b66bfa98c2a1c0d0bfc19f698d7d00b6c888 interface-ipfs-core version: ^0.157.0 ipfs-http-client version: undefined Repo version: 12 System version: x64/win32 Node.js version: v16.17.0 Commit: e8b7b66bfa98c2a1c0d0bfc19f698d7d00b6c888

    • Platform: Windows 64-bit 10.0.22000

    • Subsystem: files

    Severity:

    High - API breakage

    Description:

    • What I did
    1. Wrote a stringified JavaScript object to a Mutable Filesystem file usings files.write
    2. Read the data in the file and converted to string
    3. Attempted to parse the string using JSON.parse
    4. Wrote a different stringified JavaScript object to the same Mutable Filesystem file usings files.write
    5. Read the data in the file and converted to string
    6. Attempted to parse the string using JSON.parse
    • What happened

    Second parse attempt failed due to invalid JSON

    • What I expected to happen

    Second parse attempt to succeed

    • Work around

    Remove the file and re-create

    • Hypothesis
    1. There is some type of shared buffer that is not getting reset properly
    2. An EOF marker is being used in files and the EOF is put in the wrong place

    Steps to reproduce the error:

    import {create} from "ipfs";
    
    const ipfs = await create(); // create an ipfs instance and enhance it to use ipvfs
    // use standard ipfs file function rm to remove the file
    try {
        await ipfs.files.rm("/write-bug.txt");
    } catch(e) {
    
    }
    
    const o1 = [{"path":"QmScjZmC4J4ZHq6bGTUyYSESfTKDhxo8X7o3QShSawTsqi","hash":"f7a67e7a0a50e87e59713999562d06cc3d2511709c0a3ded8020d8247e47251c","version":1,"kind":"String","delta":[],"btime":1673137076140,"mtime":1673137076140},{"hash":"4fe36dd2fd280cbdd9414f3efa61d2b49116453e7edad0316b8b6be1d1c64817","version":2,"kind":"String","delta":[[17,1,""],[13,4,"aul!"]],"mtime":1673137076424},{"hash":"0c8a635762b80e327d384f660387f3acc5f24363de54366404e4a391260fd5c5","version":3,"kind":"String","delta":[[12,1,"m"],[14,2,"ry"]],"mtime":1673137092227}];
    const o2 = [{"path":"QmP1MKmdnpz2c1WVZRzx6VkDS2Y7ueLnqhn7J5xMeC3QhD","hash":"4fe36dd2fd280cbdd9414f3efa61d2b49116453e7edad0316b8b6be1d1c64817","rebased":[[1673136578323,2]],"version":2,"kind":"String","delta":[],"mtime":1673136578323,"btime":1673136569845},{"hash":"0c8a635762b80e327d384f660387f3acc5f24363de54366404e4a391260fd5c5","version":2,"kind":"String","delta":[[12,1,"m"],[14,2,"ry"]],"mtime":1673136578323}]
    await ipfs.files.write("/write-bug.txt",JSON.stringify(o1),{create:true});
    let s1 = "";
    for await(const chunk of ipfs.files.read("/write-bug.txt")) {
        s1 += chunk.toString();
    }
    console.log(JSON.parse(s1));
    //JSON.parse(JSON.stringify(o2)); confirm stringify and parse work for object in question
    //await ipfs.files.rm("/write-bug.txt"); // work around
    await ipfs.files.write("/write-bug.txt",JSON.stringify(o2),{create:true});
    let s2 = "";
    for await(const chunk of ipfs.files.read("/write-bug.txt")) {
        s2 += chunk.toString();
    }
    console.log(JSON.parse(s2));
    
    need/triage 
    opened by anywhichway 0
  • TypeError: RequestInit: duplex option is required when sending a body.

    TypeError: RequestInit: duplex option is required when sending a body.

    Hi, I was working with ipfs-http-client version ^59.0.0. Everything was working fine, and I did some updates through brew, and Node got updated to V19. Previously I was on V18.13.0

    Now the code is giving above mentioned error while performing ipfs.add operation. For other ipfs operations, everything is working fine. I did downgrade to node V18.13.0, but the issue is still there. I am not sure what wrong i am doing.

    I am using Mac OS. Here is the code to reproduce the issue...

    const ipfs = create({
        host: 'ipfs.infura.io',
        port: 5001,
        protocol: 'https',
        headers: {
            authorization: auth,
        },
    });
    
    const filepath = "./github.png";
    
    fs.readFile(filepath, async (err , data) => {
        if (err){
            console.error(err);
        }
        const filename = filepath.split("/").pop();
        const result = await ipfs.add({path:filename,content:Buffer.from(data)});
        console.log(result);
    }); 
    

    Here is the error log :-

    TypeError: RequestInit: duplex option is required when sending a body.
        at Object.fetch (node:internal/deps/undici/undici:14062:11)
        at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
        at async Client.fetch (/Users/raman/Desktop/ipfs/ipfsNode/node_modules/ipfs-utils/src/http.js:132:22)
        at async addAll (file:///Users/raman/Desktop/ipfs/ipfsNode/node_modules/ipfs-http-client/src/add-all.js:36:17)
        at async last (file:///Users/raman/Desktop/ipfs/ipfsNode/node_modules/it-last/dist/src/index.js:7:22)
        at async Object.add (file:///Users/raman/Desktop/ipfs/ipfsNode/node_modules/ipfs-http-client/src/add.js:22:14)
    
    need/triage 
    opened by Raman-Raje 2
  • improve dockerfiles

    improve dockerfiles

    improve dockerfiles by removing unnecessary layers and greatly reducing size. remove sed line that causes insecure exposure -- users must use proper configs. adds a proper init, catatonit, selected for modern signal handling.

    opened by sevenrats 1
  • ipfs-core does not connect with peers listed in the bootstrap field of config file

    ipfs-core does not connect with peers listed in the bootstrap field of config file

    • Version:

    version : ipfs-core 0.17.0

    • Platform:

    Ubuntu

    • Subsystem:

    Severity:

    Description:

    I am starting IPFS node programmatically using ipfs-core with custom repository. Have written an implementation of js-datastore following the implementation of js-datastore-s3. The node is started, but it does not connect with the peers mentioned in the bootstrap field of the config file. When tried with 0.15.4, the node connects with peers on startup. But that does not happen for the latest version.

    Steps to reproduce the error:

    need/triage 
    opened by RebekkalPangras 1
  • Can't generate a new key using ipfs-core

    Can't generate a new key using ipfs-core

    • Version:

    json { version: '0.17.0', commit: '', repo: '12', system: 'amd64/linux', golang: 'go1.19.1', 'ipfs-http-client': '1.0.0' }

    • Platform:

    Linux darkside 6.0.12-200.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 8 17:15:53 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

    • Subsystem:

    ipfs-http-client

    Severity:

    Medium

    Description:

    • I tried to generate a new key by using ipfs-http-client
    • It generate a error HTTPError: unrecognized key type: Ed25519
    • It should had generate a new key that I could use with IPNS in ed25519
    • I think it happens because the keytype is Ed25519 and not ed25519 (same for RSA instead of rsa)

    Steps to reproduce the error:

    • Create a configuration of ipfs-http-client
    • Generate a new key
    import dotenv from 'dotenv';
    import { create } from 'ipfs-http-client';
    dotenv.config();
    
    const ipfs = create({
        url: process.env.IPFS_API,
    })
    
    await ipfs.key.gen("KEY");
    
    need/triage 
    opened by 0xtekgrinder 1
Releases(ipfs-v0.65.0)
  • ipfs-v0.65.0(Oct 24, 2022)

    See the upgrade guide.

    ⚠ BREAKING CHANGES

    • ipfs is now bundled with [email protected] which has different config. See the migration guide here: https://github.com/libp2p/js-libp2p/blob/master/doc/migrations/v0.39-v0.40.md

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-cli bumped from ^0.14.2 to ^0.15.0
        • ipfs-core bumped from ^0.16.1 to ^0.17.0
      • devDependencies
        • interface-ipfs-core bumped from ^0.156.1 to ^0.157.0
        • ipfs-client bumped from ^0.9.1 to ^0.9.2
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-http-client bumped from ^58.0.1 to ^59.0.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-message-port-server-v0.14.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-message-port-protocol bumped from ^0.13.1 to ^0.14.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-message-port-protocol-v0.14.0(Oct 24, 2022)

  • ipfs-message-port-client-v0.14.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-message-port-protocol bumped from ^0.13.1 to ^0.14.0
      • devDependencies
        • interface-ipfs-core bumped from ^0.156.1 to ^0.157.0
        • ipfs-core bumped from ^0.16.1 to ^0.17.0
        • ipfs-message-port-server bumped from ^0.13.1 to ^0.14.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-server-v0.14.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-core-utils bumped from ^0.16.1 to ^0.17.0
        • ipfs-http-gateway bumped from ^0.11.1 to ^0.12.0
      • devDependencies
        • ipfs-http-client bumped from ^58.0.1 to ^59.0.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-response-v5.0.0(Oct 24, 2022)

  • ipfs-http-gateway-v0.12.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Bug Fixes

    • replace slice with subarray for increased performance (#4210) (dfc43d4)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-http-response bumped from ^4.0.1 to ^5.0.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-client-v59.0.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-core-utils bumped from ^0.16.1 to ^0.17.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-grpc-server-v0.11.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Bug Fixes

    • replace slice with subarray for increased performance (#4210) (dfc43d4)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
      • devDependencies
        • ipfs-core bumped from ^0.16.1 to ^0.17.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-grpc-client-v0.12.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-core-utils bumped from ^0.16.1 to ^0.17.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-daemon-v0.15.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core bumped from ^0.16.1 to ^0.17.0
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-grpc-server bumped from ^0.10.1 to ^0.11.0
        • ipfs-http-gateway bumped from ^0.11.1 to ^0.12.0
        • ipfs-http-server bumped from ^0.13.2 to ^0.14.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-core-v0.17.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    • ipfs is now bundled with [email protected] which has different config
    • require IPNS V2 signatures (#4207)

    Features

    Bug Fixes

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-config bumped from ^0.5.1 to ^0.6.0
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-core-utils bumped from ^0.16.1 to ^0.17.0
        • ipfs-http-client bumped from ^58.0.1 to ^59.0.0
      • devDependencies
        • interface-ipfs-core bumped from ^0.156.1 to ^0.157.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-core-utils-v0.17.0(Oct 24, 2022)

  • ipfs-core-types-v0.13.0(Oct 24, 2022)

  • ipfs-core-config-v0.6.0(Oct 24, 2022)

  • ipfs-client-v0.9.2(Oct 24, 2022)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-grpc-client bumped from ^0.11.1 to ^0.12.0
        • ipfs-http-client bumped from ^58.0.1 to ^59.0.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-cli-v0.15.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    Features

    Bug Fixes

    • replace slice with subarray for increased performance (#4210) (dfc43d4)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core bumped from ^0.16.1 to ^0.17.0
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
        • ipfs-core-utils bumped from ^0.16.1 to ^0.17.0
        • ipfs-daemon bumped from ^0.14.2 to ^0.15.0
        • ipfs-http-client bumped from ^58.0.1 to ^59.0.0
    Source code(tar.gz)
    Source code(zip)
  • interface-ipfs-core-v0.157.0(Oct 24, 2022)

    ⚠ BREAKING CHANGES

    • ipfs is now bundled with [email protected] which has different config
    • require IPNS V2 signatures (#4207)

    Features

    Bug Fixes

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.1 to ^0.13.0
    Source code(tar.gz)
    Source code(zip)
  • ipfs-v0.64.2(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-cli bumped from ^0.14.1 to ^0.14.2
        • ipfs-core bumped from ^0.16.0 to ^0.16.1
      • devDependencies
        • interface-ipfs-core bumped from ^0.156.0 to ^0.156.1
        • ipfs-client bumped from ^0.9.0 to ^0.9.1
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-http-client bumped from ^58.0.0 to ^58.0.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-v0.64.1(Sep 21, 2022)

  • ipfs-message-port-server-v0.13.1(Sep 21, 2022)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-message-port-protocol bumped from ^0.13.0 to ^0.13.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-message-port-protocol-v0.13.1(Sep 21, 2022)

  • ipfs-message-port-client-v0.13.1(Sep 21, 2022)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-message-port-protocol bumped from ^0.13.0 to ^0.13.1
      • devDependencies
        • interface-ipfs-core bumped from ^0.156.0 to ^0.156.1
        • ipfs-core bumped from ^0.16.0 to ^0.16.1
        • ipfs-message-port-server bumped from ^0.13.0 to ^0.13.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-server-v0.13.2(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-core-utils bumped from ^0.16.0 to ^0.16.1
        • ipfs-http-gateway bumped from ^0.11.0 to ^0.11.1
      • devDependencies
        • ipfs-http-client bumped from ^58.0.0 to ^58.0.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-server-v0.13.1(Sep 21, 2022)

  • ipfs-http-response-v4.0.1(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • devDependencies
        • ipfs-core bumped from ^0.16.0 to ^0.16.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-gateway-v0.11.1(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-http-response bumped from ^4.0.0 to ^4.0.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-http-client-v58.0.1(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-core-utils bumped from ^0.16.0 to ^0.16.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-grpc-server-v0.10.1(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
      • devDependencies
        • ipfs-core bumped from ^0.16.0 to ^0.16.1
    Source code(tar.gz)
    Source code(zip)
  • ipfs-grpc-client-v0.11.1(Sep 21, 2022)

    Bug Fixes

    • update @multiformats/multiadd to 11.0.0 (2a830bf)

    Dependencies

    • The following workspace dependencies were updated
      • dependencies
        • ipfs-core-types bumped from ^0.12.0 to ^0.12.1
        • ipfs-core-utils bumped from ^0.16.0 to ^0.16.1
    Source code(tar.gz)
    Source code(zip)
Owner
IPFS
A peer-to-peer hypermedia protocol
IPFS
A JavaScript implementation of Git.

JS-Git This project is a collection of modules that helps in implementing git powered applications in JavaScript. The original purpose for this is to

Tim Caswell 3.8k Dec 31, 2022
🤖 GPU accelerated Neural networks in JavaScript for Browsers and Node.js

brain.js GPU accelerated Neural networks in JavaScript for Browsers and Node.js About brain.js is a GPU accelerated library for Neural Networks writte

brain.js 13.4k Jan 7, 2023
A JavaScript PDF generation library for Node and the browser

PDFKit A JavaScript PDF generation library for Node and the browser. Description PDFKit is a PDF document generation library for Node and the browser

null 8.5k Jan 2, 2023
A modular geospatial engine written in JavaScript

A modular geospatial engine written in JavaScript turfjs.org Turf is a JavaScript library for spatial analysis. It includes traditional spatial operat

turf 7.6k Jan 3, 2023
A javascript Bitcoin library for node.js and browsers.

BitcoinJS (bitcoinjs-lib) A javascript Bitcoin library for node.js and browsers. Written in TypeScript, but committing the JS files to verify. Release

bitcoinjs 4.8k Jan 1, 2023
IPFS implementation in JavaScript

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

IPFS 7.2k Jan 8, 2023
Virtual IPFS

Nebulus Virtual IPFS Nebulus is an IPFS compatible file system that lets you work privately and locally while preserving all the authenticity traits o

Lex Skøgard 243 Dec 10, 2022
⁂ The simple file storage service for IPFS & Filecoin

⁂ web3.storage The simple file storage service for IPFS & Filecoin. Getting started This project uses node v16 and npm v7. It's a monorepo that use np

Web3 Storage 423 Dec 25, 2022
potsky.eth NTF website hosted on IPFS

potsky NFT Website Introduction This website showcases potsky's digital creations from 90's to now created on Amiga and on Mac OS X. Dev # install dep

Potsky 2 Jan 6, 2022
Use Pinata (IPFS) as a simple datastore

?? Pinatastore A simple module to store and retrieve simple JSON data from a decentralized databse. (Pinata IPFS) Pinatastore uses a structure similar

Navindu Amarakoon 3 Jan 10, 2022
Dead simple program to upload NFT data to IPFS via nft.storage

NFTP The simplest way to publish files and folders to IPFS, with one command. 100% FREE to upload as much files as you want, powered by nft.storage. N

factoria 35 Dec 11, 2022
A full stack digital marketplace running on Ethereum, built with Polygon, Next.js, Tailwind, Solidity, Hardhat, Ethers.js, and IPFS

A full stack digital marketplace running on Ethereum, built with Polygon, Next.js, Tailwind, Solidity, Hardhat, Ethers.js, and IPFS

Christotle Agholor 32 Dec 27, 2022
Full stack NFT marketplace built with Polygon, Solidity, IPFS, Web3, Ether, Tailwind & Next.js

Full stack NFT marketplace built with Polygon, Solidity, IPFS, Web3, Ether, Tailwind & Next.js This is a full stack project with both frontend and bac

Christotle Agholor 13 Aug 3, 2022
Decentralized twitter using Solidity, Ethereum, hardhat, ethers, IPFS, Next.JS, TypeScript, TailwindCSS.

DWITTER: Decentralized Twitter Check out the deployed version of this app at https://dwtr.wajeshubham.in Transactions on Ethereum are slow. Therefore,

Shubham Waje 12 Sep 2, 2022
Yet another library for generating NFT artwork, uploading NFT assets and metadata to IPFS, deploying NFT smart contracts, and minting NFT collections

eznft Yet another library for generating NFT artwork, uploading NFT assets and metadata to IPFS, deploying NFT smart contracts, and minting NFT collec

null 3 Sep 21, 2022
A CLI to upload files to IPFS and interact with them using wbeb3.storage

Storli A CLI to upload files to IPFS and interact with them using web3.storage Storli Usage Commands Usage $ npm install -g storli $ storli COMMAND ru

Anish De 9 Aug 7, 2022
✨ An IRL tokenization platform to turn your hopes, dreams, and desires into fundable NFTs on the Polygon blockchain using Chainlink, IPFS, Moralis, and NFT.Storage.

GoFundYourself Getting funding for your passion project, needs or dream doesn't have to be a nightmare! check out our live demo on Netlify Let's Fundi

Brian H. Hough | brianhuff.eth 7 Dec 6, 2022
Minty is an example of how to mint non-fungible tokens (NFTs) while storing the associated data on IPFS

Minty is an example of how to mint non-fungible tokens (NFTs) while storing the associated data on IPFS. You can also use Minty to pin your data on an IPFS pinning service such as nft.storage and Pinata.

One & Zeros 10 Nov 12, 2022
Suck a DAG out of a peer in the IPFS network.

dagula Suck a DAG out of a peer in the IPFS network. Install npm i dagula Usage import { Dagula } from 'dagula' import { getLibp2p } from 'dagula/p2p

Alan Shaw 11 Nov 2, 2022
ChainLook is a decentralized blockchain analytics platform based on TheGraph and IPFS.

ChainLook https://chainlook.xyz ChainLook is a decentralized blockchain analytics platform based on TheGraph and IPFS. You can create beautiful widget

Saleel 11 Nov 21, 2022