# ๐ฆ Highlights
Bitswap 1.2.0, transfer speed improvements & go-IPFS 0.5.x compatibility
Blink and youโll miss it, js-IPFS@0.45.0
js-IPFS@0.46.0
has been released; goodies include Bitswap 1.2.0, much faster file transfers, and go-IPFS 0.5.x compatibility!
# โ๏ธ Bitswap 1.2.0
Version 1.2.0 of the Bitswap protocol has landed in js-IPFS
and brings a host of performance improvements around coordinating the supply of blocks to peers across the network. For example, peers can now respond to WANT (opens new window)s with messages saying they have the block but not sending it, in order to later send multiple blocks in one message instead of many small messages resulting in less chatty network operations and faster overall transfer times.
See ipfs/js-ipfs-bitswap#204 (opens new window) for more!
# ๐จ Faster file transfers
The Bitswap module has had a bit of an overhaul and is now much faster at pulling blocks from other nodes across the network. Before, we waited a little while before sending our wantlist to newly connected peersโweโve reduced that window and seen a massive speedup (smaller bars are better):
As you can see, the new js-IPFS is about 3x faster at pulling large files from other nodes on the network than the previous release, and that increases to about 5x as the files get smaller.
Weโre not stopping there though, there are plenty more performance improvements on the way!
See ipfs/js-ipfs-bitswap#224 (opens new window) for all the details.
# ๐ค go-IPFS v0.5.x compatibility
The new version of go-IPFS brought a whole slew of changes with itโcheck out our blog post (opens new window) for more details.
The good news is js-IPFS has taken on a whole heap of these features and the ipfs-http-client
is now 100% compatible with go-ipfs@0.5.x
. Your js-IPFS
nodes will now happily chat away to go-IPFS
nodes over the network via Bitswap and gossipsub (opens new window) too.
See ipfs/js-ipfs#3013 (opens new window) for the full rundown.
# โจNew features
- Using an AbortSignal (opens new window) to cancel a request to get a block (via
ipfs.dag.get
oripfs.cat
for example) will now cause those blocks to be removed from your wantlist (ipfs/js-ipfs-bitswap#214 (opens new window)) ipfs.dht.get(key, [options])
accepts a string or a buffer askey
(#3013 (opens new window)) (0900bb9 (opens new window))
# ๐ฆ Bugs fixed
- Decrease wantlist sending debounce time (ipfs/js-ipfs-bitswap#224 (opens new window))
- Fix bitswap race conditions when requesting the same block twice (ipfs/js-ipfs-bitswap#214 (opens new window))
- libp2p pubsub now creates two unidirectional streams to topic peers making message delivery more reliable (ipfs/go-ipfs-pubsub#331 (opens new window))
ipfs.config.get([key,] [options])
-key
is optional again (#3069 (opens new window)) (d043138 (opens new window))- extra mode bits passed to unixfs constructor are now ignored (ipfs/js-ipfs-unixfs#53 (opens new window)) (65a040d (opens new window))
# ๐ API Changes
# Core API
ipfs.ls
no longer supports asort
option (#3013 (opens new window)) (0900bb9 (opens new window))ipfs.key.gen
defaults to 2048 bit RSA keys (#3013 (opens new window)) (0900bb9 (opens new window))
# CLI
ipfs files ls
no longer supports the-U
(unsorted) flag (#3013 (opens new window)) (0900bb9 (opens new window))
# HTTP API
POST /api/v0/pin/list
no longer supports non-streaming responses (#3013 (opens new window)) (0900bb9 (opens new window))
# HTTP API Client
ipfs.dht.get
resolves to a Buffer in line with the core API (#3013 (opens new window)) (0900bb9 (opens new window))
# ๐บ๏ธ Whatโs next?
Check out the js-IPFS Project Roadmap (opens new window) which contains headline features organised in the order we hope them to land.
Only large features are called out in the roadmap, expect lots of small bugfix releases between the roadmapped items!
# ๐ Huge thank you to everyone that made this release possible
- @0xflotus (opens new window) (1 commit, 1 PR)
- @5310 (opens new window) (1 comment)
- @achingbrain (opens new window) (30 commits, 12 PRs, 1 issue, 55 comments)
- @aphelionz (opens new window) (1 PR, 1 comment)
- @AquiGorka (opens new window) (1 comment)
- @Artod (opens new window) (1 comment)
- @autonome (opens new window) (11 comments)
- @bluelovers (opens new window) (1 commit)
- @bmann (opens new window) (1 comment)
- @carsonfarmer (opens new window) (1 issue, 4 comments)
- @chelneru (opens new window) (1 comment)
- @codecov-commenter (opens new window) (9 comments)
- @danielrempe-ut (opens new window) (1 issue, 1 comment)
- @dapplion (opens new window) (2 comments)
- @daviddahl (opens new window) (1 issue, 5 comments)
- @dirkmc (opens new window) (1 comment)
- @domwoe (opens new window) (1 comment)
- @DougAnderson444 (opens new window) (4 comments)
- @Gozala (opens new window) (2 PRs, 7 issues, 25 comments)
- @hacdias (opens new window) (2 comments)
- @hugomrdias (opens new window) (4 commits, 5 PRs, 1 issue, 26 comments)
- @jacobheun (opens new window) (4 commits, 3 PRs, 2 issues, 18 comments)
- @jakehemmerle (opens new window) (2 comments)
- @johnnymatthews (opens new window) (1 commit, 1 PR)
- @justinmchase (opens new window) (1 comment)
- @kumavis (opens new window) (2 comments)
- @lazyweirdo (opens new window) (2 comments)
- @lidel (opens new window) (1 PR, 2 comments)
- @matrushka (opens new window) (1 PR)
- @mburns (opens new window) (1 comment)
- @mdtanrikulu (opens new window) (1 issue)
- @mikeal (opens new window) (1 comment)
- @mitra42 (opens new window) (1 comment)
- @momack2 (opens new window) (1 commit, 1 comment)
- @mpetrunic (opens new window) (1 comment)
- @obo20 (opens new window) (1 comment)
- @oed (opens new window) (10 comments)
- @RenatoPerotti (opens new window) (1 issue)
- @revolunet (opens new window) (1 commit, 1 PR)
- @ribasushi (opens new window) (1 comment)
- @robert-cronin (opens new window) (1 issue, 1 comment)
- @rohail411 (opens new window) (2 issues, 2 comments)
- @rumkin (opens new window) (1 issue)
- @rvagg (opens new window) (4 comments)
- @SignpostMarv (opens new window) (1 comment)
- @stasbar (opens new window) (1 issue, 1 comment)
- @Stebalien (opens new window) (7 comments)
- @stensonb (opens new window) (11 commits)
- @tabcat (opens new window) (1 issue)
- @tarunbatra (opens new window) (1 PR, 3 comments)
- @thattommyhall (opens new window) (1 commit)
- @tymmesyde (opens new window) (1 comment)
- @typhu-xyz (opens new window) (2 comments)
- @vasco-santos (opens new window) (56 commits, 13 PRs, 8 issues, 66 comments)
- @vmx (opens new window) (2 commits, 5 comments)
- @welcome (5 comments)
- @wemeetagain (opens new window) (38 commits, 9 PRs, 3 issues, 8 comments)
- @witten (opens new window) (1 comment)
- @xinfushe-dev (opens new window) (1 comment)
- @xmaysonnave (opens new window) (1 comment)
# ๐๐ฝ 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 in the js-IPFS repo (opens new window) - Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute: https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands
- 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 https://discuss.ipfs.tech/ and help users finding their answers.
- Join the ๐ IPFS Core Implementations Weekly Sync ๐ฐ (opens new window) and be part of the 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.tech (opens new window). We are also available at the #ipfs
channel on Freenode.