# Custom Instruction Data

Let's take a look at how to pass our own custom instruction data to a program. This data must be *serialized* to *Berkeley Packet Filter (BPF)* format - which is what the Solana runtime supports for serialized data.   

BPF is exactly why we use `cargo build-bpf` to build Solana programs in Rust. For instructions sent over RPC it's no different. We'll use a library called `borsh` on both client and program side.   

_____

**For native**, we need to add `borsh` and `borsh-derive` to `Cargo.toml` so we can mark a struct as serializable to/from **BPF format**.   

**For Anchor**, you'll see that they've made it quite easy (as in, they do all of the serializing for you).