solana_kit_rpc_subscriptions 0.9.3
solana_kit_rpc_subscriptions: ^0.9.3 copied to clipboard
Subscription client for the Solana Kit Dart SDK.
solana_kit_rpc_subscriptions #
Subscription client for the Solana Kit Dart SDK. createSolanaRpcSubscriptions wires a WebSocket channel, the subscriptions API, JSON serialization, and error handling into a client that streams account, signature, log, slot, and program notifications.
Installation #
Install the package directly:
dependencies:
"solana_kit_rpc_subscriptions": ^0.9.3
If your app uses several Solana Kit packages together, you can also depend on the umbrella package instead:
dart pub add solana_kit
Inside this monorepo, Dart workspace resolution uses the local package automatically.
Documentation #
- Package page: https://pub.dev/packages/solana_kit_rpc_subscriptions
- API reference: https://pub.dev/documentation/solana_kit_rpc_subscriptions/latest/
- Workspace docs: https://openbudgetfun.github.io/solana_kit/
- Package catalog entry: https://openbudgetfun.github.io/solana_kit/reference/package-catalog#solana_kit_rpc_subscriptions
- Source code: https://github.com/openbudgetfun/solana_kit/tree/main/packages/solana_kit_rpc_subscriptions
For architecture notes, getting-started guides, and cross-package examples, start with the workspace docs site and then drill down into the package README and API reference.
Usage #
Subscribing to notifications #
createSolanaRpcSubscriptions returns a client whose request method returns a PendingRpcSubscriptionsRequest. Call .subscribe(...) to send the JSON-RPC subscription request and await its server subscription ID. The returned stream emits only the matching notification result payloads; other requests and subscriptions on a shared channel are filtered out. Cancel with a CancellationTokenSource to unsubscribe and release listeners. Notifications that arrive during acquisition are retained until the first listener attaches, up to 1024 events; exceeding this bound ends the subscription with a StateError. Listen promptly after acquisition. Cancellation before acknowledgement still releases a late server subscription when its ID arrives.
import 'package:solana_kit_rpc_subscriptions/solana_kit_rpc_subscriptions.dart';
import 'package:solana_kit_subscribable/solana_kit_subscribable.dart';
Future<void> main() async {
final subscriptions = createSolanaRpcSubscriptions(
'wss://api.mainnet-beta.solana.com',
);
final controller = CancellationTokenSource();
final pending = subscriptions.request('slotNotifications');
final stream = await pending.subscribe(
RpcSubscribeOptions(abortSignal: controller.token),
);
var count = 0;
await for (final notification in stream) {
print('Slot: $notification');
count++;
if (count >= 3) {
controller.cancel();
}
}
}
Typed subscription methods #
The client exposes typed helpers for each subscription method, with parameter builders from solana_kit_rpc_subscriptions_api.
import 'package:solana_kit_rpc_subscriptions/solana_kit_rpc_subscriptions.dart';
import 'package:solana_kit_subscribable/solana_kit_subscribable.dart';
Future<void> main() async {
final subscriptions = createSolanaRpcSubscriptions(
'wss://api.mainnet-beta.solana.com',
);
final controller = CancellationTokenSource();
final stream = await subscriptions
.request('slotNotifications')
.subscribe(RpcSubscribeOptions(abortSignal: controller.token));
await for (final notification in stream) {
print(notification);
controller.cancel();
}
}
Key APIs #
createSolanaRpcSubscriptions(url, [config]): the standard client factory.RpcSubscriptionsinterface withrequest(methodName, params).PendingRpcSubscriptionsRequest.subscribe(options)returning aStream.RpcSubscribeOptionswithabortSignalfor cancellation.
Example #
Use example/main.dart as a runnable starting point for solana_kit_rpc_subscriptions.
- Import path:
package:solana_kit_rpc_subscriptions/solana_kit_rpc_subscriptions.dart - This section is centrally maintained with
mdtto keep package guidance aligned. - After updating shared docs templates, run
docs:updatefrom the repo root.
Maintenance #
- Validate docs in CI and locally with
docs:check. - Keep examples focused on one workflow and reference package README sections for deeper API details.