# π¦ Highlights
upgrades to new multiformats stack and adds
.car
import/export
js-IPFS@0.56.0
is on its way to the moon with a new data layer and import/export for Content Addressable aRchive (opens new window)s along with many small bug fixes and performance improvements!
# π Multiformats
Underneath the Interplanetary Filesystem is a multitude of Merkle Directed Acyclic Graphs (opens new window). When you add a file to your IPFS node, you are converting it into a DAG representation of that file. This DAG may be made up of one or more nodes of the dag-pb (opens new window) or raw (opens new window) format in various UnixFS layouts (opens new window).
DAG node formats are not limited to dag-pb
or raw
, however, we also have dag-cbor (opens new window), dag-json (opens new window) and the newcomer dag-jose (opens new window).
The interfaces that these formats implement was previously defined by the ipld/interface-ipld-format (opens new window) module, but there is an all-new implementation in the form of BlockCodec (opens new window)s from the multiformats/js-multiformats (opens new window) module.
js-IPFS@0.56.0
ships with this new implementation which is much more lightweight and easier to work with and has seen the gzipped size of the ipfs-http-client (opens new window) bundle drop by amost 26%.
The most common formats are supported out of the box - dag-pb (opens new window), dag-cbor (opens new window), raw (opens new window), and json (opens new window). Older formats that haven't been refactored into BlockCodec
s yet such as ipld-ethereum (opens new window) and ipld-git (opens new window) can be converted at runtime using the ipld-format-to-blockcodec (opens new window) module, and you can configure your node to use them - see the traverse-ipld-graphs (opens new window) example for how to do this.
Multiformats also covers multihashing and multibase encoding of data. Out of the box js-IPFS@0.56.0
supports common hashes and bases such as sha2-256
, base58btc
and base32
but more esoteric hashes/bases will need to be configured in a similar way - see the docs (opens new window) for more information and howtos.
If you want to learn more about Merkle DAGs, there's a whole tutorial (opens new window) on the ProtoSchool website!
# .car
import/export
The low-level ipfs.block.put
and ipfs.block.get
commands allow you to get and put invidiual blocks into your blockstore, but this can be tedious when dealing with large DAG (opens new window)s since you will invoke these operations multiple times and without interpreting the blocks as you read them, there's no way to follow links (opens new window) to other blocks.
Enter the Content Addressable aRchive (opens new window) or .car
file. This file functions as storage for the blocks that make up one or more DAGs, consisting of a root CID (opens new window) then some or all of the blocks that are children of that CID
.
.car
files can be exported from js-IPFS@0.56.0
and later with:
$ jsipfs dag export ${CID} | archive.car
and imported with:
$ jsipfs dag import ./archive.car
or
$ cat ./archive.car | jsipfs dag import
Equivalent API methods exist to perform the same operations against an in-process node or over HTTP to a remote js-IPFS or go-IPFS node - see the docs for ipfs.dag.export (opens new window) and ipfs.dag.import (opens new window) for more information.
# β¨New features
- feat: Implement dag import/export (#3728 (opens new window)) (700765b (opens new window))
- fix: make "ipfs resolve" cli command recursive by default (#3707 (opens new window)) (399ce36 (opens new window))
# π¨ Breaking changes
- feat: upgrade to the new multiformats (#3556 (opens new window)) (d13d15f (opens new window))
# π·οΈ Bug fixes
- docs: fixed relative link to CONFIG.md (#3715 (opens new window)) (54478b0 (opens new window))
- chore: fix pkg.homepage for ipfs-core-types (#3733 (opens new window)) (cd548e6 (opens new window))
- docs: examples/browser-create-react-app (#3694 (opens new window)) (dc041aa (opens new window))
- fix(ipfs-core-types): wrong extension (#3753 (opens new window)) (4bad1c6 (opens new window))
- fix: round bandwidth stats (#3735 (opens new window)) (58fb802 (opens new window))
- fix: support @web-std/file in normalize input (#3750 (opens new window)) (6fd7776 (opens new window))
- fix: fix flaky pubsub test (#3761 (opens new window)) (8bcf56f (opens new window))
- docs: improve README of browser-create-react-app (#3737 (opens new window)) (9852d14 (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
- @3xtr4t3rr3str14l (opens new window) (2 comments)
- @AbhinavMir (opens new window) (1 issue)
- @achingbrain (opens new window) (151 commits, 74 PRs, 7 issues, 107 comments)
- @acostalima (opens new window) (1 commit, 2 comments)
- @adam12121997 (opens new window) (1 issue)
- @alanshaw (opens new window) (1 commit, 1 PR, 1 issue, 3 comments)
- @andrew (opens new window) (1 comment)
- @ashutosh1206 (opens new window) (1 issue)
- @BasBastiaansen (opens new window) (1 comment)
- @bgins (opens new window) (1 commit, 1 PR)
- @BigLep (opens new window) (10 comments)
- @binarybaron (opens new window) (2 issues, 2 comments)
- @bluelovers (opens new window) (7 PRs, 1 issue, 4 comments)
- @carsonfarmer (opens new window) (1 comment)
- @chrisdukakis (opens new window) (2 comments)
- @codecov-commenter (opens new window) (3 comments)
- @CSDUMMI (opens new window) (1 commit, 1 PR, 1 issue, 7 comments)
- @d4mr (opens new window) (2 comments)
- @D4nte (opens new window) (1 commit, 6 comments)
- @da-kami (opens new window) (2 PRs, 2 comments)
- @dabit3 (opens new window) (1 issue)
- @daviddias (opens new window) (1 comment)
- @denyncrawford (opens new window) (2 issues)
- @dependabot[bot] (opens new window) (33 commits)
- @evgkul (opens new window) (1 PR, 4 comments)
- @expede (opens new window) (1 comment)
- @fusetim (opens new window) (1 comment)
- @glitch003 (opens new window) (1 issue, 1 comment)
- @Gozala (opens new window) (3 commits, 3 PRs, 6 issues, 36 comments)
- @hacdias (opens new window) (2 commits)
- @herexu (opens new window) (2 issues, 1 comment)
- @hugomrdias (opens new window) (2 commits, 3 comments)
- @iRyanBell (opens new window) (1 commit, 1 PR)
- @jacobheun (opens new window) (1 comment)
- @JamieRez (opens new window) (1 issue, 1 comment)
- @Jan877 (opens new window) (1 issue)
- @janus (opens new window) (1 issue)
- @jerradpatch (opens new window) (1 comment)
- @jneidel (opens new window) (1 commit, 1 PR)
- @jonyg80 (opens new window) (1 commit)
- @JoranHonig (opens new window) (1 comment)
- @jorishermans (opens new window) (1 comment)
- @kotx (opens new window) (1 issue, 5 comments)
- @kvutien (opens new window) (1 commit, 2 PRs, 3 comments)
- @lidel (opens new window) (5 commits, 1 PR, 62 comments)
- @logasja (opens new window) (2 issues, 2 comments)
- @LoreBadTime (opens new window) (1 comment)
- @magniff (opens new window) (1 comment)
- @manas99 (opens new window) (1 issue)
- @martinheidegger (opens new window) (2 issues)
- @matheus23 (opens new window) (1 commit, 1 PR, 2 issues, 3 comments)
- @mcclure (opens new window) (1 commit, 1 PR, 4 issues, 4 comments)
- @mctrivia (opens new window) (1 comment)
- @MisterY (opens new window) (1 commit, 1 comment)
- @mkaranta (opens new window) (1 comment)
- @mobeiqingkong (opens new window) (1 PR)
- @montassarBoukraine (opens new window) (1 comment)
- @mrheat (opens new window) (1 comment)
- @mtiger2k (opens new window) (1 issue, 1 comment)
- @mxinden (opens new window) (1 commit, 1 PR)
- @n1c01a5 (opens new window) (1 issue)
- @nazarhussain (opens new window) (1 commit, 2 PRs, 9 comments)
- @negamaxi (opens new window) (3 comments)
- @NickBeukema (opens new window) (1 comment)
- @ocknamo (opens new window) (1 PR, 2 issues, 1 comment)
- @oed (opens new window) (1 comment)
- @oinuar (opens new window) (1 comment)
- @oliveriosousa (opens new window) (5 PRs, 1 issue, 2 comments)
- @olizilla (opens new window) (2 commits, 2 PRs, 3 issues, 15 comments)
- @peterbraden (opens new window) (1 comment)
- @phazejeff (opens new window) (3 comments)
- @PierreJeanjacquot (opens new window) (1 comment)
- @pint1022 (opens new window) (1 issue, 1 comment)
- @PyKestrel (opens new window) (1 comment)
- @ravi0the0sun (opens new window) (1 issue)
- @realdennis (opens new window) (1 issue)
- @RobertFischer (opens new window) (1 comment)
- @rvagg (opens new window) (28 commits, 17 PRs, 1 issue, 39 comments)
- @rysiekpl (opens new window) (1 comment)
- @shikaan (opens new window) (1 PR)
- @skogard (opens new window) (1 issue, 1 comment)
- @somay (opens new window) (2 comments)
- @sreeharshar84 (opens new window) (1 issue, 1 comment)
- @stale (6 comments)
- @stallingerl (opens new window) (1 comment)
- @stbrody (opens new window) (5 comments)
- @tchardin (opens new window) (1 issue, 1 comment)
- @Tcll (opens new window) (1 issue, 6 comments)
- @TheBojda (opens new window) (1 issue)
- @TheDiscordian (opens new window) (3 issues, 6 comments)
- @ti0 (opens new window) (1 issue)
- @TJKoury (opens new window) (1 comment)
- @Tumble17 (opens new window) (1 comment)
- @ukstv (opens new window) (1 issue, 5 comments)
- @v-stickykeys (opens new window) (1 comment)
- @vasco-santos (opens new window) (112 commits, 23 PRs, 3 issues, 58 comments)
- @vaultec81 (opens new window) (1 issue, 3 comments)
- @vmx (opens new window) (2 commits, 2 comments)
- @woss (opens new window) (1 issue)
- @xmaysonnave (opens new window) (1 comment)
- @yng3 (opens new window) (2 PRs, 1 comment)
- @yurtsiv (opens new window) (3 comments)
- @yusefnapora (opens new window) (1 commit, 1 PR, 12 comments)
- @Zaba505 (opens new window) (1 issue)
- @zeim839 (opens new window) (3 commits, 4 PRs, 10 comments)
- @zhgromov (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.io/ 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.io (opens new window). We are also available at the #ipfs
channel on Freenode.