Web3.js: Solid foundations create stable structures.

Web3.js: Solid foundations create stable structures.

Authored by Phil Ngo

Web3.js could be considered one of Et[[here](https://github.com/ChainSafe/web3.js)](https://medium.com/chainsafe-systems/chainsafe-receives-grant-from-ef-for-web3js-9e4376f5f36a)um's most recognizable Javascript tools and libraries. It is a collection of modules that allow you to interact with a local or remote Ethereum node using HTTP, IPC, or WebSocket. The Ethereum Foundation awarded ChainSafe a grant in Fall 2020 to maintain and modernize Web3.js, which begins with continuing to support v1.x while rewriting the library in modern TypeScript under v4.x. You can read about our announcement of the grant here, check the Github repo here, and read the docs here.

Imagine you're building a house. You have a blueprint passed along from multiple designers and architects, you start building out the foundation, putting up the framework, and just when you're about to achieve a milestone in the build, something unexpected happens.

You use a hammer (maybe not the best hammer, but it still works!) to nail in the final wood plank of this milestone's framework, but all of a sudden, a part of it somewhere else gets unstable, and one side of the frame start to break.

How did that happen? Maybe the foundation wasn't done correctly? Maybe the blueprints weren't correct? Maybe there's some instability somewhere else? There could be many factors, but it's incredibly frustrating because you don't know what you did wrong, and it just isn't working. This is essentially what we're dealing with right now on Web3.js with our 1.x releases.

Version 1.6.1 is finally released

We just deployed 1.6.1 after four release candidates, each with their own intricate set of problems which diverts our team's ability to focus on our 4.x TypeScript rewrite. We understand the dependence of many critical applications utilizing Web3.js. And the last thing we want to do is release a version that creates other issues for our users, but it feels almost inevitable with the state of Web3.js 1.x. Releasing versions that break usability is a huge concern for us because it means you're not likely to upgrade and will revert to a previous, outdated version with little or no support.

We apologize for the severe delay in releasing a new update with important fixes, including a breaking output change in web3.eth.getBlock().

This example is why the 4.x TypeScript rewrite is vital to the future of Web3.js

Again, it has been demonstrated time and again that we are putting most of our efforts into rebuilding the Web3.js library. Our 4.xTypeScript rebuild takes this foundation into consideration so we can better maintain Web3.js going forward and provide developers with a better experience using the library.

We would like to reiterate how important it will be to migrate to the new 4.xTypeScript rewrite as soon as it's stabilized. We are working to minimize the differences and avoid breaking changes as much as possible as we understand migration is not always fun for those who rely on our work.

As we continue to pour our resources into making 4.xa stable version at feature parity for our users, we also recognize the frustration involved with current issues that continue to go unresolved because of the higher priority of stabilizing 4.x . Our rationale remains that 4.x will help solve a majority of issues plaguing our current 1.x releases. And the priority will be to complete this as soon as possible for the community.

Thank you again for your understanding as we work to achieve a better Web3.js for all!

Ongoing discussions:

While I still have your attention, we have an open discussion about how gasPriceautofills on all web3.eth.sendTransaction transactions if the user does not explicitly specify it. We would love your feedback on whether this functionality is actually an issue and not a feature for most users. Modifying this will likely affect many users. Hence the discussion is open for anyone to add their opinion.

Get Involved

For any support related inquiries, please reach out to the Web3.js team through ChainSafe on our Discord in the #web3js-general channel or Twitter.

Want to work with ChainSafe? Join us! Check out the new Careers section of our website and our open positions, and get in touch with us at careers@chainsafe.io if you are interested.

Learn more about ChainSafe by visiting our website, through our Medium, via Twitter, visiting the ChainSafe GitHub, or joining the conversation on ChainSafe's Discord.