// the find
metaplex-foundation/shank
Extracts IDL from Solana Rust contracts
Shank extracts IDL (Interface Definition Language) from Solana Rust programs by parsing derive macro annotations, then feeds that IDL to solita for SDK generation. It solves a real pain point: Solana programs don't have a standard way to describe their interface, so without tooling like this you're manually writing client bindings. Primarily useful to Metaplex ecosystem developers or anyone building native Solana programs (not Anchor).
The annotation-based approach is non-invasive — you add `#[derive(ShankInstruction)]` and similar macros to existing types without restructuring your program. The crate split is clean: macro-impl handles parsing, shank-idl handles extraction, shank-render handles code generation — each independently testable. The fixture-based test suite (`.rs` source paired with expected `.json` output) makes it easy to verify IDL extraction correctness without runtime overhead. The `shank-render` PDA seed renderer is a genuine time-saver — deriving `find_program_address` helpers from seed annotations is tedious to write by hand.
226 stars and Metaplex-internal origin means this is effectively a single-team tool that happens to be public — if Metaplex moves on (they've been pivoting toward Kinobi/Codama), maintenance could quietly stall. The IDL format it produces is solita-compatible, not Anchor-compatible, which fragments the ecosystem: most Solana tooling now expects Anchor IDL, so you'd need a conversion step or be locked into the Metaplex toolchain. The README says almost nothing about what the annotations actually look like or what gets extracted — you have to read the test fixtures to understand usage. No versioning or schema stability guarantees on the IDL output format, which is a problem if you're generating SDKs that ship to end users.