1. Datasources

Datasources

Pick the right Carbon datasource for real-time streams, historical backfills or account snapshots, and compare all 14.

On this page

A datasource feeds updates (accounts, transactions, deletions, block details) into a Carbon pipeline. Carbon ships 12 datasources for Carbon 2.0 and two legacy ones that only work with Carbon 1.x. This page helps you choose; each datasource has its own page with a runnable example, every option, and its failure modes. For how datasources fit into a pipeline, see Datasources and Updates.

Which datasource should I use?#

You needYou haveUse
Real-time transactions and accounts, lowest latencyA Yellowstone gRPC endpoint (own node, Triton, Helius, QuickNode…)Yellowstone gRPC
Real-time, no gaps after reconnectsA Helius plan with LaserStreamHelius LaserStream
Real-time transactions over WebSocketA Helius API key with enhanced WebSocketsHelius enhanced WebSockets
Real-time transactions and block details, no gRPCAn RPC node with blockSubscribe enabled (not the public endpoint)RPC blockSubscribe
Real-time account changes for one program, freeAny RPC WebSocket, including the public oneRPC programSubscribe
Current state of a program's accounts, onceAny RPC; filters for big programsRPC getProgramAccounts
Current state of a large program, paginated or incrementalA Helius API keyHelius gPA v2
Complete state of a huge program at one slotDisk, RAM and a snapshot (or a node serving one)Validator snapshot
History of one address, then new transactionsAny RPC, including the public one (slow)RPC transaction crawler
History of one address, fast, oldest firstA Helius API keyHelius getTransactionsForAddress
Every transaction in a slot range, or following the tip over HTTPAny RPC with those blocksRPC block crawler
Long historical ranges, very fast, no providerA Carbon 1.x applicationJetstreamer (legacy)
Transactions before execution, for latency-critical signalsJito Shredstream access and a Carbon 1.x applicationJito Shredstream (legacy)
Updates from your own source (Kafka, files, tests)Your own producerStream message

On a budget: the RPC datasources work on the free public endpoint, which is enough to learn and prototype but is heavily rate-limited. A common production setup is a snapshot datasource (GPA, gPA v2 or a validator snapshot) for initial state plus a streaming one (Yellowstone or LaserStream) in the same pipeline; see Load account state and Multiple datasources.

Comparison#

Every crate is named carbon-<name>-datasource, version 2.0.0, except the two legacy ones (1.0.0, Carbon 1.x only). "Emits" lists the update variants the datasource actually produces. Where the datasource's update_types() declares something different, the page says so; the pipeline doesn't check that list.

DatasourceTransportEmitsLive / historicalFinishes?Paid provider?Latency
Yellowstone gRPCGeyser gRPCAccount, AccountDeletion, TransactionLiveNoUsuallyLowest (streamed as slots are processed)
Helius LaserStreamGeyser gRPC (Helius)Account, AccountDeletion, TransactionLive + replay from a recent slotNoYesLowest
Helius enhanced WebSocketsWebSocketTransaction, Account, AccountDeletionLiveNoYesLow
RPC blockSubscribeWebSocketBlockDetails, TransactionLiveNoNeeds a node with block subscriptionsLow (per block)
RPC programSubscribeWebSocketAccount, AccountDeletionLiveNoNoLow
RPC getProgramAccountsHTTP, one callAccountCurrent stateYesNoBatch
Helius gPA v2HTTP, paginatedAccountCurrent stateYesYesBatch
Validator snapshotSnapshot archiveAccountState at the snapshot slotYesNoBatch (minutes to hours)
RPC transaction crawlerHTTP pollingTransactionHistorical, then pollsNoNoSeconds (5 s poll by default)
Helius getTransactionsForAddressHTTP, paginatedTransactionHistoricalYesYesBatch
RPC block crawlerHTTP pollingTransactionSlot range, or follows the tipWith end_slotNoSeconds
Stream messageIn-process channelAccount, AccountDeletion, TransactionWhatever you sendWhen senders dropNoYour producer's
Jetstreamer (legacy) — Carbon 1.x onlyOld Faithful archiveTransaction, BlockDetailsHistoricalYesNoBatch (high throughput)
Jito Shredstream gRPC (legacy) — Carbon 1.x onlygRPC (shredstream-proxy)Transaction, without metadataLive, pre-executionWhen the stream endsJito accessLowest (before execution)

Things every datasource page covers#

  • Encoding. Carbon rebuilds transactions and accounts from binary payloads. Every RPC and WebSocket datasource that lets you choose an encoding needs Base64; JSON encodings fail to decode.
  • Backpressure. Most streaming datasources use try_send and drop updates when the pipeline's channel (channel_buffer_size, default 1000) is full. The pages say which ones, and the log line to look for.
  • Finishing. A pipeline stops when every datasource has finished. Batch datasources finish on their own; streams run until cancelled. See Shutdown.
  • Metrics. Each datasource registers its own counters and histograms next to the pipeline's; see Metrics and the metrics reference.

Need something else? Write your own with the custom datasource guide, or push updates in through Stream message.

Your endpoints

Code samples use these instead of the placeholders, so you can copy and run them as they are. They’re stored only in this browser and never sent anywhere.