Following the renaming of the company and our products, we have now released the OpenZeppelin SDK, formerly known as ZeppelinOS. You can install and start using the new SDK via the CLI:
npm install -g @openzeppelin/cli
openzeppelin init
But before moving forward with the changes involved in this release, let's talk about what the renaming involved for all our products, and what motivated it.
The rationale
It was not lost to us that ZeppelinOS was not a very descriptive name when we first launched it. I think this paragraph by Matt Condon (from 2 years ago!) sums up the general feeling pretty well:
I’m really not a fan of people adopting these already well-defined terms (like OS and Kernel) and using them to describe things that aren’t what we already understand to be an OS and a Kernel. It just adds more confusion to an already ridiculously definition-saturated space. Call your project what it is and don’t fall into the AWS naming trap that requires blog posts like this to accurately describe what you’re working on.
Heck, we even started a trend for projects to follow this naming - our apologies to the industry for that.
Also, as the company announcement mentions, the link among OpenZeppelin (the contracts library), ZeppelinOS (the development toolkit), Zepkit (the starter kits), and Zeppelin (the company) was not clear at all. This motivated the rebranding of both the company and our products as a whole.
Contracts, SDK & Kits: the OpenZeppelin Platform
The OpenZeppelin SDK is now part of a larger suite, the OpenZeppelin Platform. The Platform groups together the SDK, the OpenZeppelin Contracts (formerly known as openzeppelin-solidity
), and the OpenZeppelin Starter Kits (formerly known as Zepkits). All packages are now published under the single @openzeppelin npm organization, and their repositories under the openzeppelin github organization.
Besides the renaming and reorganization of the projects, we have also reorganized the teams maintaining them within our company. Instead of working as separate teams for contracts and for the SDK, we are now happy to be operating as a single platform team. You will find @rrecuero, @martintel, @Dennison, @frangio, @nventuro, @ylv-io, @jcarpanelli, and myself working together on the OpenZeppelin set of open source tools. This gives us not only more flexbility, but also helps us in building a more cohesive and unified developer experience. The first step in this direction is the beautiful new documentation site for the entire OpenZeppelin Platform, which you can check out today.
Old and new packages
The following table shows the mapping of the projects and repositories between the old and new naming schemes.
Old package | Old repository | New package | New repository |
---|---|---|---|
zos | zeppelinos/zos | @openzeppelin/cli | openzeppelin/openzeppelin-sdk |
zos-lib | zeppelinos/zos | @openzeppelin/upgrades | openzeppelin/openzeppelin-sdk |
openzeppelin-eth | openzeppelin/openzeppelin-eth | @openzeppelin/contracts-ethereum-package | openzeppelin/contracts-ethereum-package |
openzeppelin-solidity | openzeppelin/openzeppelin-solidity | @openzeppelin/contracts | openzeppelin/contracts |
openzeppelin-test-helpers | openzeppelin/openzeppelin-test-helpers | @openzeppelin/test-helpers | openzeppelin/openzeppelin-test-helpers |
(the last two are yet to be published under the new naming on npm)
Migrating from ZeppelinOS to the OpenZeppelin SDK
Now to the technical bits. We released the OpenZeppelin SDK (@openzeppelin/cli and @openzeppelin/upgrades) under version 2.5.0, to follow the versioning we were using for ZeppelinOS.
The SDK changes the name of the executable from zos
to openzeppelin
(or oz
if you prefer shorter names). It also keeps all configuration files under a single .openzeppelin
folder, to avoid polluting your project's root. The release changelog describes all modifications in more detail:
However, all the previous namings are still supported, meaning that you don't need to change anything on your project when you migrate. You can still run zos
in your command line or scripts, and if a zos.json
is found at the root of your project, the SDK CLI will still pick it up. Also, the Ethereum Package openzeppelin-eth
will still be supported by the SDK, but you can opt-in to the new @openzeppelin/contracts-ethereum-package
.
The only thing that will require a change on your end are import statements: for instance, if you are importing zos-lib/contracts/Initializable.sol
, you will now need to import @openzeppelin/upgrades/contracts/Initializable.sol
.
Another project to join the Platform
Since renaming all of our products, moving our repositories around, deploying a new company site, and building a new documentation site is not enough to keep us busy, we have also been working on openzeppelin-network
. This is a javascript library for frontend development, to simplify acquiring a web3 connection to the Ethereum network. Its genesis was the bits and pieces we needed to build into the Starter Kit to set up the connection, and we are now extracting it as a standalone component, with support for meta-transactions out of the box.
Expect more news about this real soon!
Where we go from here
With the development teams now working side by side on a single OpenZeppelin Platform, expect a more cohesive development experience. We will build a single development journey on top of our tools, to seamlessly go from writing smart contracts, to operating them, and to creating powerful decentralized applications - while keeping each project's own identity, allowing you to pick just the components you want.
Happy coding!