What is a Geyser Plugin
Geyser allows data to stream out of a Solana validator into external services the moment it happens. It feeds your application account updates, transactions, block info, slot status and all the other state changes in real time. We need it because if a validator doesn't offer it, your application can only poll it, and polling a busy RPC node is prohibitively expensive.
It works in Solana because validators are extremely fast. If you run a Geyser plugin inside one, then your program can just listen to the stream of data coming out of it, much like listening to a baby monitor.
Think of it this way: how do you know if the baby is awake? You could climb up the stairs every two minutes and look, but you'd have to spend a lot of energy just to miss 95% of the wake ups. A monitor in the room is better - it can stream to you instantly when it hears a noise. Geyser is the monitor in the validator nursery. Your program doesn't have to call the nursery and ask if it's been quiet; rather, Geyser pushes the events into your app.
How Geyser Works Technically
The volume of data coming off a validator is massive - new blocks arrive every 400 milliseconds with hundreds of thousands of accounts changing in each. If Geyser wasn't available, you would be calling your RPC provider continuously, trying to catch up on state changes. With Geyser available, your application can just listen for the events happening right now - no network latency and no polling.
Most builders will interact with Geyser through a Yellowstone gRPC stream. Yellowstone is a Geyser stream wrapped in gRPC, a high performance RPC protocol that also has native support for streaming. You can then subscribe to specific transactions that match some filter - either for one account on a particular pool, for all transactions that touch a certain program, or for all the slots. The streams that feed Yellowstone usually come directly from the Helius node infrastructure. Helius runs validators on their own and they have the capability to send Geyser plugins over to their customers. The consumer for this stream could be anything - an indexer powering an explorer, a trading bot needing sub second speed, or a wallet like Phantom trying to display the latest balances.
The problem with the Geyser model is that a plugin that runs inside the validator process shares that process' memory and CPU. A poorly written Geyser plugin could potentially leak memory or get stuck on a slow write that could impact the quality of the validator itself. As a result, most large Geyser providers will run on a dedicated non-voting node rather than their own validator node that has stake attached to it.
How Geyser Compares to Ethereum's Data Access
Ethereum developers can stream data too - for example by using something like eth_subscribe. Ethereum is much slower with new blocks arriving every 12 seconds - that's 30 Solana slots in the time Ethereum gets one block! Ethereum's demand for indexing data is so great that The Graph built a whole network of indexing nodes that the Graph Protocol runs using incentives to get people to index things. But Solana's need is less because you can use Geyser to access this information, and Agave is a validator framework that makes Geyser first class by including it as part of the API itself rather than having the user connect to a third party. In addition, Firedancer has a gRPC stream of its own built-in.
The economics of this difference are quite striking. A trading bot watching 50 pools would need to poll an RPC provider every 400 milliseconds, sending roughly 125 requests per second to see the same updates a Yellowstone user would receive in one stream with no latency overhead.
Why Geyser Matters
Geyser is the plumbing that lets you build things you wouldn't be able to without it. The reason why a liquidation bot can liquidate a position seconds faster than any other bot is probably because its using Helius Geyser streams rather than a polling RPC request. If a position gets collateralized enough to hit a liquidation point, then the liquidator that has their transactions signed before the others will win the liquidation. Using Helius gives you that edge. Without a real time data stream, your position might already be liquidated by the time you even knew the collateral had gone under. Geyser is also what allows a Solana explorer to show you the results of a swap within a second, rather than requiring you to refresh the page to see it settle.
The only downside to using Geyser is that you have to be connected to a specific node and you're at its mercy if it lags. That's the case even if you run the Geyser streams yourself. So there's no advantage here in running Geyser streams yourself versus using a Geyser provider like Helius, other than the savings from the monthly service fee.
Can a Geyser plugin modify transactions or accounts?
No - Geyser only provides data, there are no transactions being written as part of the protocol. Geyser is only a read interface, you cannot write transactions with it.