Bring your NPCs to life.
A Rust runtime for game NPCs — conversations, quests, and inventory — exposed through a stable C ABI that works with any engine.
Universal C ABI
One shared library. Unity, Unreal, Godot, custom engines — if it can call C functions, it can use Animist.
Memory Safe
Built in Rust with panic catching at the FFI boundary. No undefined behavior leaking into your game.
Zero Dependencies
Link a single static or dynamic library. No runtime to install, no package manager, no framework lock-in.
Clean Handle API
Opaque handles with status codes. Familiar patterns for anyone who's integrated a C library before.
A conversation in 10 lines of C
AnimistRuntimeHandle* runtime = NULL;
animist_runtime_create(&runtime);
uint64_t conv_id;
animist_conversation_begin(runtime, player_id, char_id, &conv_id);
AnimistResponseHandle* response = NULL;
animist_conversation_send_message(
runtime, conv_id, char_id, "Merchant",
player_id, "Do you sell potions?", &response);
char* text = NULL;
animist_response_get_text(response, &text);
printf("%s\n", text);
animist_string_free(text);
animist_response_destroy(response);
animist_runtime_destroy(runtime);
That's the entire integration. Create a runtime, start a conversation, send messages, read responses. Same pattern in C#, C++, Python, or any FFI-capable language.
See it running right now
This site is itself a consumer of the Animist C ABI, loaded via Node.js FFI.
The demo page talks to a real AnimistRuntime through the same
shared library your game would link.