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 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 gears up to build Cardinal, our upcoming EVM para-client, 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.

Right now the PluGeth project is in pretty early stages. While we’re leaning strongly that direction for extracting data for use in Cardinal, we don’t want to go sprinkling plugin hooks all over the Geth codebase without any idea of how anyone plans to use them. We want to get the community involved in finding the right way to set up plugin hooks that will actually be useful to people.

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.

  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.