# C-friendly FFI Design This document is a guide for authoring Rust libraries that expose a C-friendly FFI and distributing them as ordinary CMake/pkg-config packages. It covers how to design C-friendly FFI signatures, how to pass primitive types, enums, strings and Rust-specific constructs such as `Option` and `Result` across the boundary, and how to write the accompanying C/C++ header files. ## Contents - [FFI Function Signatures](ffi-function-signatures.md) - [Allowed Data Types](allowed-data-types.md) - [C/C++ Headers](c-cpp-headers.md)