This is part of a 5 part series on Rivet's transition to Cardinal. If you are unfamiliar with Cardinal, we suggest starting with the introduction

The Go-Ethereum client, Geth, has been forked many times for many reasons. Our own EtherCattle initiative forked Geth to introduce streaming replication to support high availability. Some other popular forks include:

Different projects have forked for different reasons: Alternative consensus mechanisms, different EVM configurations, alternative block construction methods, extracting data not readily exposed by the API, the list goes on.

As the Rivet team started to build Cardinal, we decided to take a step away from the EtherCattle Geth fork and see if there was a better way to extract the data we need quickly and efficiently from a running Geth node. Rather than integrating the changes we need for data extraction directly into the Geth codebase (where it becomes challenging to merge upstream updates around our own changes), we decided to try to design a plugin system, where the changes to the Geth codebase are very surgical (and thus hopefully easy to merge around), and the bulk of our logic could be contained in plugins that get loaded at runtime.

For our own purposes, we’re working on a Cardinal Geth plugin to stream the data Cardinal needs out of Geth. But we can imagine a future where Polygon’s EVM changes and consensus rules become a plugin that we could load alongside the Cardinal Geth plugin to extract Polygon’s data for use in Cardinal; or where ETC’s changes become a plugin we could load alongside a Flashbots plugin to quickly get a Flashbots network for Ethereum Classic 1.

As the Rivet team starts to roll out Cardinal into our offering, PluGeth is entering production use with a plugin to extract data for Cardinal. We have also built a number of other plugins, including ongoing work on one to brings Parity Trace functionality to PluGeth, and others that provide other pieces of information that are hard to get out of an Ethereum node.

While we do believe PluGeth is production ready for our purposes, it’s still in its pretty early stages. Right now, the plugin hooks we’ve built into PluGeth meet the needs of Cardinal and the handful of other plugins we’ve built in house. But there are a lot of things we can imagine PluGeth doing in the future that we haven’t built hooks for yet. Rather than build in hooks that we merely hope will be useful to somebody (and then have to maintain them, unsure of whether anyone is actually using them), we’re adopting a philosophy of building hooks on an as-needed basis. If your team is looking to build something against PluGeth, but the hooks you need don’t exist today, please reach out to us so we can help design a hook to meet your needs.

If you have ideas for PluGeth plugins and would like to get involved, hop over to #plugeth on our Discord Server to join the conversation.


Read about’s Cardinal Rollout Plan.

  1. As a practical matter, some projects like Polygon and Optimism may have drifted too far from Geth to easily circle back and re-implement the projects as plugins, but it may make sense to implement a compatible plugin system so that plugins written for PluGeth could be used within those projects.