Skip to content
This repository has been archived by the owner on Feb 12, 2024. It is now read-only.

⚡️ v0.37.0 RELEASE 🚀 #2192

Closed
52 of 54 tasks
alanshaw opened this issue Jun 24, 2019 · 3 comments
Closed
52 of 54 tasks

⚡️ v0.37.0 RELEASE 🚀 #2192

alanshaw opened this issue Jun 24, 2019 · 3 comments
Assignees
Labels
topic/release Topic release

Comments

@alanshaw
Copy link
Member

alanshaw commented Jun 24, 2019

New constructor, better DNSLink support and delegated routing!

🗺 What's left for release

🔦 Highlights

👷‍♂️ Brand new constructor

We're in the middle of converting IPFS, libp2p and IPLD modules to using async/await and async iterators 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 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. 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 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.

🌎 Support for DNSLink IPNS name resolution

JS IPFS can finally resolve a DNSLink 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 in JS IPFS and the libp2p delegated routing example 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
  • Support added for ipfs name resolve /ipns/<fqdn>
  • (BREAKING) ipfs name resolve is now recursive by default, set the recursive option to false to disable

✅ Release Checklist

❤️ 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:

🙌🏽 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:

⁉️ 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.

@lidel
Copy link
Member

lidel commented Jun 24, 2019

If we also want to include delegated peer/content routing, see my notes in #2155 (comment)

@lidel
Copy link
Member

lidel commented Jul 4, 2019

Would be cool if we include #2217, as it makes gateway URLs prettier and in line with what go-ipfs does.
(Makes /ipns/ feature more polished)

@alanshaw
Copy link
Member Author

There's a new RC for trying out npm i ipfs@0.37.0-rc.0 🤠

alanshaw pushed a commit that referenced this issue Aug 2, 2019
Since I was going through these anyway to ensure they work with [0.37](#2192) I've updated the examples to use the new [`IPFS.create` constructor](https://github.com/ipfs/js-ipfs#ipfs-constructor) and switched to using the promised API so that we onboard new users to using promises and minimise the disruption caused when #1670 bubbles up to here.

License: MIT
Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
@alanshaw alanshaw added topic/release Topic release status/in-progress In progress labels Aug 5, 2019
@alanshaw alanshaw self-assigned this Aug 5, 2019
@alanshaw alanshaw removed the status/in-progress In progress label Aug 6, 2019
@alanshaw alanshaw unpinned this issue Aug 6, 2019
@alanshaw alanshaw closed this as completed Aug 6, 2019
github-actions bot pushed a commit to ipfs-examples/js-ipfs-custom-libp2p that referenced this issue Jun 14, 2021
Since I was going through these anyway to ensure they work with [0.37](ipfs/js-ipfs#2192) I've updated the examples to use the new [`IPFS.create` constructor](https://github.com/ipfs/js-ipfs#ipfs-constructor) and switched to using the promised API so that we onboard new users to using promises and minimise the disruption caused when ipfs/js-ipfs#1670 bubbles up to here.

License: MIT
Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
oliveriosousa pushed a commit to ipfs-examples/js-ipfs-examples that referenced this issue Jul 26, 2021
Since I was going through these anyway to ensure they work with [0.37](ipfs/js-ipfs#2192) I've updated the examples to use the new [`IPFS.create` constructor](https://github.com/ipfs/js-ipfs#ipfs-constructor) and switched to using the promised API so that we onboard new users to using promises and minimise the disruption caused when ipfs/js-ipfs#1670 bubbles up to here.

License: MIT
Signed-off-by: Alan Shaw <alan.shaw@protocol.ai>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
topic/release Topic release
Projects
None yet
Development

No branches or pull requests

2 participants