Codecs are the foundation for instruction data, account layouts, sysvar schemas, and many protocol-level payloads.
The codec layer is split into focused packages so you can keep dependencies small while still composing rich layouts.
Core concepts#
Encoder<T>#
Turns a value into bytes.
Decoder<T>#
Turns bytes into a value.
Codec<TFrom, TTo>#
Combines both directions.
Package map#
solana_kit_codecs_core— base abstractions and composition helperssolana_kit_codecs_numbers— little-endian integers and floatssolana_kit_codecs_strings— base16/base58/base64/utf8/baseX encoders-
solana_kit_codecs_data_structures— structs, tuples, arrays, maps, unions, nullable values, and more solana_kit_options— Rust-styleOption<T>modeling and codec support
Example: build a simple struct codec#
import 'package:solana_kit_codecs_data_structures/solana_kit_codecs_data_structures.dart';
import 'package:solana_kit_codecs_numbers/solana_kit_codecs_numbers.dart';
final transferLayout = getStructCodec({
'discriminator': getU8Codec(),
'amount': getU64Codec(),
});
final bytes = transferLayout.encode({
'discriminator': 2,
'amount': BigInt.from(1_000_000),
});
final decoded = transferLayout.decode(bytes);
print(decoded['amount']);
Example: choose among variants#
Typed Union Helpers#
Prefer typed union helpers when a codec has a fixed, small number of variants. They improve IDE type inference and reduce downstream casting.
import 'package:solana_kit_codecs_data_structures/solana_kit_codecs_data_structures.dart';
import 'package:solana_kit_codecs_numbers/solana_kit_codecs_numbers.dart';
final codec = getUnion2Codec(
getU8Codec(),
getU32Codec(),
(bytes, offset) => bytes.length - offset > 1 ? 1 : 0,
);
final encoded = codec.encode(const Union2Variant1<int, int>(1000));
final decoded = codec.decode(encoded);
When to use codecs#
Use codecs when you need:
- deterministic byte layouts
- testable encode/decode logic
- reuse across program clients and account decoders
- confidence that a Dart representation matches an upstream wire format
Avoid ad hoc Uint8List slicing once a layout becomes non-trivial. A codec pays for itself quickly.