weeaa
goyser
Go

🐳 Solana Geyser Go SDK

Last updated Jun 2, 2026
68
Stars
13
Forks
0
Issues
0
Stars/day
Attention Score
34
Language breakdown
Go 100.0%
Files click to expand
README

Solana Geyser SDK

GoDoc Go Report Card License

This library contains tooling to interact with Yellowstone & Jito Geyser plugins.

yellowstone

❇️ Contents

- Subscribe to Account

🛟 Support

If my work has been useful in building your for-profit services/infra/bots/etc, consider donating at EcrHvqa5Vh4NhR3bitRZVrdcUGr1Z3o6bXHz7xgBU2FB (SOL).

📡 Methods

  • Yellowstone
- SubscribeAccounts - AppendAccounts - UnsubscribeAccounts - UnsubscribeAccountsByFilterName - UnsubscribeAllAccounts - SubscribeSlots - UnsubscribeSlots - SubscribeTransaction - UnsubscribeTransaction - SubscribeTransactionStatus - UnsubscribeTransactionStatus - SubscribeBlocks - UnsubscribeBlocks - SubscribeBlocksMeta - UnsubscribeBlocksMeta - SubscribeEntry - UnsubscribeEntry - SubscribeAccountDataSlice - UnsubscribeAccountDataSlice
  • Jito (TBD)
💡 It also contains a ConvertTransaction function which converts from Goyser to github.com/gagliardetto/solana-go types :)

💾 Installing

Go 1.22.0 or higher.

go get github.com/weeaa/goyser@latest

💻 Examples

Subscribe to Account – Yellowstone

Simple example on how to monitor an account for transactions with explanations.
package main

import ( "context" "github.com/weeaa/goyser/yellowstone_geyser" geyserpb "github.com/weeaa/goyser/yellowstonegeyser/pb" "log" "os" "time" )

const subAccount = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"

func main() { ctx := context.Background()

// get the geyser rpc address geyserRPC := os.Getenv("GEYSER_RPC")

// create geyser client client, err := yellowstone_geyser.New(ctx, geyserRPC, nil) if err != nil { log.Fatal(err) }

// create a new subscribe client which is tied, for our example we will name it main // the created client is stored in client.Streams if err = client.AddStreamClient(ctx, "main", geyserpb.CommitmentLevelCONFIRMED); err != nil { log.Fatal(err) }

// get the stream client streamClient := client.GetStreamClient("main") if streamClient == nil { log.Fatal("client does not have a stream named main") }

// subscribe to the account you want to see txns from and set a custom filter name to filter them out later if err = streamClient.SubscribeAccounts("accounts", &geyser_pb.SubscribeRequestFilterAccounts{ Account: []string{subAccount}, }); err != nil { log.Fatal(err) }

// loop through the stream and print the output for out := range streamClient.Ch { // u can filter the output by checking the filters go func() { filters := out.GetFilters() for _, filter := range filters { switch filter { case "accounts": log.Printf("account filter: %+v", out.GetAccount()) default: log.Printf("unknown filter: %s", filter) } } }() break }

time.Sleep(5 * time.Second)

// unsubscribe from the account if err = streamClient.UnsubscribeAccounts("accounts", subAccount); err != nil { log.Fatal(err) } }

📃 License

Apache-2.0 License.

© 2026 GitRepoTrend · weeaa/goyser · Updated daily from GitHub