Building Instructions
Construct typed instructions from generated Codama clients.
Search across all documentation pages
Construct typed instructions from generated Codama clients.
import { getIncrementInstruction } from "./generated/clients/js";
import { appendTransactionMessageInstruction } from "@solana/kit";When to reach for this:
import {
createTransactionMessage,
pipe,
setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
createSolanaRpc,
} from "@solana/kit";
import { getIncrementInstruction } from "./generated/clients/js";
const rpc = createSolanaRpc(process.env.RPC_URL!);
const { value: bh } = await rpc.getLatestBlockhash().send();
const ix = getIncrementInstruction({
counter: counterAddress,
authority: walletSigner,
});
const message = pipe(
createTransactionMessage({ version: 0 }),
(m) => setTransactionMessageFeePayerSigner(walletSigner, m),
(m) => setTransactionMessageLifetimeUsingBlockhash(bh, m),
(m) => appendTransactionMessageInstruction(ix, m)
);What this demonstrates:
| Alternative | Use When | Don't Use When |
|---|---|---|
| Anchor .methods | Legacy quick scripts | Kit message control |
| Raw Buffer layout | Learning only | Production |
Run anchor build; point Codama at target/idl JSON.
Every on-chain interface change in CI.
Codama renders @solana/kit native functions.
Optional sugar atop kit.
Import generated clients in client components for writes.
Surfpool + devnet integration tests.
Do not mix with generated kit clients.
One Codama config per program or monorepo workspace.
Use generated decoders with getAccountInfo.
Map program error codes from IDL metadata.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 19, 2026