New constructor, better DNSLink support and delegated routing!
# π¦ Highlights
# π·ββοΈ Brand new constructor
We're in the middle of converting IPFS, libp2p and IPLD modules to using async/await and async iterators (opens new window) instead of callbacks. This will eventually bubble up to the JS IPFS programmatic API where there will likely be some changes that will effect your application. To ease the transition when that happens we're encouraging new and existing developers away from using our callback based APIs, towards Promise based APIs. You'll see the change reflected in our API docs (opens new window) soon. For now, there's no breaking changes, all existing APIs continue to work as usual with callbacks.
In this release there's a new way to construct an IPFS node using promises:
const IPFS = require('ipfs')
const node = await IPFS.create()
// Done, ready to use!
All the usual options you'd normally pass to the constructor can be passed to create
(opens new window). Did we mention that it's completely backwards compatible? Well yeah, it is. No breaking changes here π - you can still use new IPFS()
and wait for the ready
(opens new window) event as you used to. Or, alternatively, you can still use the constructor and await
on the new "ready" promise like so:
const IPFS = require('ipfs')
const node = new IPFS()
await node.ready
// Done, ready to use!
More details in the IPFS constructor docs (opens new window).
# π Support for DNSLink IPNS name resolution
JS IPFS can finally resolve a DNSLink (opens new window) IPNS path. It means that jsipfs name resolve /ipns/ipfs.io
will now query DNS for a dnslink
TXT record and return /ipfs/QmRq5rhjnfFHYFYbYXoqPpcJQHKu3SUuHADzSzX9ECN5eM
(for example).
It also works recursively, so your DNSLink TXT record could return another IPNS path to resolve and it would keep going. Turtles all the way down π’. Cowabunga!
Bonus π this also works on the gateway so http://127.0.0.1:8080/ipns/ipfs.io
will resolve and display the ipfs.io website. Hooray π!
# π§ Delegated peer and content routing
JS IPFS now supports delegating peer and content routing to another node on the network.
What does that mean though? Well, when you delegate, you get someone else to do something. In delegated peer and content routing we get a different IPFS node to find a piece of content or another peer on the network.
Delegation allows JS IPFS to make use of the routing abilities of other nodes. Typically we delegate to IPFS nodes that have unrestricted access to a DHT. This is useful for IPFS nodes running in the browser, or even for nodes running in resource constrained environments.
IPFS nodes running in Node.js that are behind NATs or that are not running a DHT will also benefit from leveraging delegate routers. If you are running a DHT, the delegate will be used as a fallback router.
We've setup 2 delegate nodes you can use for development and testing, check the docs for configuring delegate routers (opens new window) in JS IPFS and the libp2p delegated routing example (opens new window) for even more info!
# β¨ Web UI with revamped Files & Peers
The Web UI got a whole new lease of life in version 2.5!
We've introduced a help system designed for new users, with explanations for each section.
The Peers page now allows you to connect to a specific peer via 'Add Connection'. We also have a revamped peers table with sorting, identicons for each peer, a simplified location, a new protocol & transport column and latency!
On the Files side, you can now look at any files in the wild. But what does that mean? You can now see your pins, remove pins, add new pins, navigate to any /ipfs/QmHash
or /ipns/domain.com
path and explore the IPFS world like you never did before.
# π API Changes
- New constructor. The recommended way of creating an IPFS node programmatically is now
await IPFS.create()
. This change is backwards compatible π - (BREAKING) Gateway now implicitly responds with the contents of
/index.html
when accessing a directory/
instead of redirecting to/index.html
- Support added for
/ipns/
paths on HTTP Gateway- e.g. http://127.0.0.1:9090/ipns/tr.wikipedia-on-ipfs.org/wiki/Anasayfa.html
- Support added for
ipfs name resolve /ipns/<fqdn>
- (BREAKING)
ipfs name resolve
is now recursive by default, set therecursive
option tofalse
to disable
# β€οΈ Huge thank you to everyone that made this release possible
In alphabetical order, here are the 126 humans that made 2091 contributions to this release:
- Abraham Elmahrek (opens new window) (1 PR, 1 issue, 2 comments)
- Adam UhlΓΕ (opens new window) (4 PRs, 1 issue, 5 reviews, 5 comments)
- AkshitV (opens new window) (1 issue, 1 comment)
- Alan Shaw (opens new window) (77 PRs, 18 issues, 125 reviews, 219 comments)
- Alessandro Ricottone (opens new window) (2 PRs, 1 issue, 2 comments)
- Alex Potsides (opens new window) (18 PRs, 6 issues, 59 reviews, 43 comments)
- Anarkrypto (opens new window) (3 issues)
- AndrΓ© Cruz (opens new window) (1 PR, 3 issues, 10 comments)
- AndrewH (opens new window) (1 issue, 1 comment)
- Andy Hin (opens new window) (1 issue, 1 comment)
- antemortem (opens new window) (1 issue)
- area (opens new window) (1 comment)
- arminsal1 (opens new window) (4 comments)
- Arve Knudsen (opens new window) (5 PRs, 1 issue, 3 reviews, 17 comments)
- Asutosh (opens new window) (1 comment)
- b-rohit (opens new window) (2 comments)
- Barnyard (opens new window) (2 issues, 1 comment)
- Bora M. Alper (opens new window) (1 PR)
- Carson Farmer (opens new window) (1 issue, 3 comments)
- Carsten Munk (opens new window) (1 comment)
- Chirag Shinde (opens new window) (2 PRs, 5 comments)
- Christopher Joel (opens new window) (1 PR, 1 comment)
- Clemens Brunner (opens new window) (1 PR, 3 comments)
- Codecov (opens new window) (1 comment)
- Cody Eilar (opens new window) (2 issues, 4 comments)
- Dan Shields (opens new window) (2 PRs)
- Daniel Constantin (opens new window) (1 comment)
- David Dias (opens new window) (1 PR, 12 issues, 14 reviews, 42 comments)
- dependabot-preview (59 PRs, 38 comments)
- Dietrich Ayala (opens new window) (1 issue, 3 comments)
- Diogo Silva (opens new window) (1 PR, 2 reviews)
- dirkmc (opens new window) (16 PRs, 7 issues, 117 reviews, 73 comments)
- Dominic Della Valle (opens new window) (1 PR)
- Dzmitry Afanasenka (opens new window) (1 issue)
- Dzmitry Bachko (opens new window) (1 PR)
- Filip Ε (opens new window) (2 PRs, 1 issue, 4 comments)
- Florian (opens new window) (1 issue)
- Frederik Batuna (opens new window) (1 issue)
- Friedel Ziegelmayer (opens new window) (1 PR, 2 comments)
- ghbjklhv (opens new window) (1 issue)
- Glenn Vandeuren (opens new window) (1 issue)
- Gopalakrishna Palem (opens new window) (2 issues, 7 comments)
- Gorka Ludlow (opens new window) (1 comment)
- Gregg Altschul (opens new window) (1 comment)
- Guilherme Cunha (opens new window) (1 issue)
- hapsody (opens new window) (1 PR, 2 issues, 5 comments)
- Harris Levine (opens new window) (4 comments)
- Henrique Dias (opens new window) (3 PRs, 1 issue, 1 comment)
- hhfeng (opens new window) (2 issues, 3 comments)
- Hugo Dias (opens new window) (17 PRs, 3 issues, 47 reviews, 45 comments)
- Irakli Gozalishvili (opens new window) (10 comments)
- Isaac Jacobs (opens new window) (1 issue, 3 comments)
- Jacob Heun (opens new window) (23 PRs, 6 issues, 59 reviews, 141 comments)
- Jakub (opens new window) (1 PR)
- Jesho Carmel (opens new window) (1 comment)
- Jim Pick (opens new window) (1 comment)
- JoΓ£o Antunes (opens new window) (1 comment)
- John Hiesey (opens new window) (4 comments)
- John Wehr (opens new window) (1 issue, 8 comments)
- John_Suu (opens new window) (5 comments)
- Jonybang (opens new window) (1 PR, 1 issue, 4 comments)
- Jordan Last (opens new window) (2 comments)
- Jorropo (opens new window) (3 PRs, 3 comments)
- Joseph Krug (opens new window) (1 comment)
- Juan Benet (opens new window) (1 comment)
- Justin Maier (opens new window) (1 PR, 1 issue, 8 comments)
- Kia (opens new window) (1 issue, 3 comments)
- ksvirsky (opens new window) (1 issue, 1 comment)
- KuhnChris (opens new window) (1 PR, 2 issues, 4 comments)
- kumavis (opens new window) (3 PRs, 11 reviews, 16 comments)
- Lennart Grahl (opens new window) (2 comments)
- Leo (opens new window) (1 issue, 1 comment)
- LeonFangCN (opens new window) (1 issue, 1 comment)
- lin onetwo (opens new window) (2 comments)
- Lukasz Juraszek (opens new window) (1 comment)
- Maciej KrΓΌger (opens new window) (2 PRs, 3 issues, 2 reviews, 23 comments)
- Mahipatsinh Jadav (opens new window) (1 comment)
- Mapiac (opens new window) (1 comment)
- Marcin Rataj (opens new window) (12 PRs, 7 issues, 25 reviews, 32 comments)
- Marnee Dearman (KG7SIO) (opens new window) (1 issue)
- Mars Robertson (opens new window) (1 comment)
- Matt Ober (opens new window) (2 PRs, 1 review, 11 comments)
- Matteo Collina (opens new window) (3 comments)
- Max Graey (opens new window) (6 comments)
- Michael Avila (opens new window) (1 review, 3 comments)
- Michael Bradley (opens new window) (1 comment)
- Michael Burns (opens new window) (3 comments)
- Michael FIG (opens new window) (1 PR)
- Michiel De Backker (opens new window) (1 comment)
- Mikeal Rogers (opens new window) (1 PR, 3 issues, 15 comments)
- Mikerah (opens new window) (1 comment)
- Mikhail Ivantsov (opens new window) (1 issue, 2 comments)
- Mitra Ardron (opens new window) (3 issues)
- MollyM (opens new window) (1 comment)
- Nate Foss (opens new window) (1 PR, 5 issues, 5 comments)
- Nick Popeka (opens new window) (1 comment)
- Nick Poulden (opens new window) (1 PR, 2 comments)
- ohager (opens new window) (2 comments)
- Oli Evans (opens new window) (1 PR, 3 issues, 1 review, 6 comments)
- Pat White (opens new window) (1 comment)
- Pedro Teixeira (opens new window) (2 comments)
- PΓ©ter Huba (opens new window) (1 comment)
- Peter Occil (opens new window) (1 comment)
- pldespaigne (opens new window) (2 comments)
- Prabhakar Poudel (opens new window) (9 PRs, 4 reviews, 22 comments)
- Qmstream (opens new window) (3 PRs, 1 issue, 2 comments)
- Raul (opens new window) (1 comment)
- rayj00 (opens new window) (2 issues)
- Richard Schneider (opens new window) (1 comment)
- Robert Kiel (opens new window) (1 comment)
- Robert Misiorowski (opens new window) (1 issue, 1 comment)
- Rod Vagg (opens new window) (9 reviews, 1 comment)
- Saquib ul hassan (opens new window) (1 issue, 1 comment)
- shamb0t (opens new window) (1 issue, 1 comment)
- sigmatics (opens new window) (1 comment)
- Steven Allen (opens new window) (1 PR, 1 issue, 1 review, 5 comments)
- Tapasweni Pathak (opens new window) (2 PRs, 7 comments)
- Teri Chadbourne (opens new window) (5 PRs, 4 comments)
- thanusreemohan (opens new window) (1 issue, 3 comments)
- Topper Bowers (opens new window) (1 issue)
- Vasco Santos (opens new window) (20 PRs, 4 issues, 75 reviews, 45 comments)
- Volker Mische (opens new window) (22 PRs, 2 issues, 9 reviews, 40 comments)
- warlockD (opens new window) (1 issue)
- Whymarrh Whitby (opens new window) (1 comment)
- yuwiggin (opens new window) (1 comment)
- zthomas (opens new window) (1 issue)
# ππ½ 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 http://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.