Skip to content

Data Encoding

Zero-dependency codecs for all encodings used on Solana.

Base58

ts
import { base58Encode, base58Decode, base58BytesLength } from "solana-kiss";

const encoded = base58Encode(bytes);
const decoded = base58Decode(encoded);

Base64

ts
import { base64Encode, base64Decode } from "solana-kiss";

Base16 (hex)

ts
import { base16Encode, base16Decode } from "solana-kiss";

const hex = base16Encode(bytes); // lowercase

UTF-8

ts
import { utf8Encode, utf8Decode } from "solana-kiss";

SHA-256

ts
import { sha256Hash } from "solana-kiss";

// Accepts an array of byte arrays (concatenated before hashing)
const digest = sha256Hash([utf8Encode("global:initialize")]);

Used internally to derive Anchor discriminators. Pure-JS, no native crypto.

Branded types

All serialised primitives are branded to prevent accidental misuse at compile time:

TypeUnderlyingDescription
PubkeystringBase58-encoded 32-byte public key
BlockHashstringBase58-encoded 32-byte block hash
TransactionHandlestringBase58-encoded 64-byte signature
SignatureUint8Array64-byte Ed25519 signature
TransactionPacketUint8ArrayFull wire-format transaction bytes
BlockSlotnumberSolana slot number

Solana: Keep It Simple, Stupid. (KISS)