# Turnframe > Deterministic conversational workflows for Rust. Small model tasks propose what a message means; deterministic reducers decide effects; committed events decide what the reply may claim. Source: https://github.com/turnframe-rs/turnframe. Every page below is also available as one file at https://turnframe.rs/llms-full.txt. ## Getting started - [Introduction](https://turnframe.rs/docs): Turnframe is a Rust library for conversational LLM apps that write to real records: models propose meaning, reducers decide effects, events decide claims. - [Installation](https://turnframe.rs/docs/installation): Add Turnframe to a Rust project: the dependency line, feature flags for OpenAI, Anthropic, Gemini, Bedrock, Ollama and PostgreSQL, and the crate family. - [Quickstart: a minimal turn](https://turnframe.rs/docs/quickstart): One conversational turn end to end in Rust, with no API key, database or network: understanding, reduction, a commit and a receipt backed by its event. - [Examples](https://turnframe.rs/docs/examples): Runnable Rust examples: a travel desk that walks four guarantees, traveler onboarding, a question and an action in one turn, and a console for real LLMs. ## Concepts - [The Flow Map](https://turnframe.rs/docs/flow-map): The five steps of every Turnframe turn: persisted state sets the view, small model tasks propose, reducers decide, cards authorize, events back claims. - [Turnframe architecture guide](https://turnframe.rs/docs/architecture): How Turnframe reads a message with small verified LLM tasks, reduces the whole turn to typed commands under policy, and lets only committed events back a reply. - [Reliability model](https://turnframe.rs/docs/reliability-model): Five reliability properties for an LLM workflow: three hold by construction, two are probabilistic and may only fail safe. How each is enforced and measured. - [Persistent interactions](https://turnframe.rs/docs/interactions): Confirmation cards as persistent, server-owned records: options whose meaning the server keeps, revision binding, stale clicks, and one blocking card per case. - [What the assistant is allowed to say](https://turnframe.rs/docs/composition): What an assistant is allowed to say: receipts rendered from committed events, an acknowledgement reviewed before it is shown, and an answer for every question. ## Guides - [Provider adapters](https://turnframe.rs/docs/provider-adapters): One provider-neutral model layer for OpenAI, Azure OpenAI, Anthropic, Gemini, Vertex AI, AWS Bedrock and Ollama, with capability routing and bounded fallback. - [The persistence contract](https://turnframe.rs/docs/persistence): The seven store traits behind Turnframe, the rules every implementation keeps, the atomicity model, and how to bring your own database. - [Adopting over a database that has no revision column](https://turnframe.rs/docs/revision-migration): Putting an optimistic-concurrency revision on PostgreSQL tables that never had one, so Turnframe can run over the database you already have. - [Telemetry](https://turnframe.rs/docs/telemetry): The turnframe.* metrics, tracing spans and OpenTelemetry bridge, with prompt and completion text kept out by default and no user text in any label. - [Evaluating a Turnframe agent](https://turnframe.rs/docs/evaluation): Evaluate an LLM assistant against a contract: deterministic assertions per turn, a score per understanding task, and samples kept apart from judge votes. - [Recipes from the sample domains](https://turnframe.rs/docs/recipes): Shapes the sample domains prove without new framework types: values read from a document and reviewed, fields with three states, and proving an executor. - [Consent and acceptance](https://turnframe.rs/docs/consent-and-acceptance): Modelling a legal acceptance with the types Turnframe already has: a workflow of its own, an ordinary card, a bound artifact version and the event ledger. - [Canary and rollback, per workflow](https://turnframe.rs/docs/canary-and-rollback): Releasing a conversational assistant one workflow at a time: a shadow run, an authoritative slice, then everywhere, and how to roll one workflow back. ## Security - [Threat Model](https://turnframe.rs/docs/threat-model): Trust boundaries of an LLM app that writes records: malicious text, prompt injection, tampered clicks, cross-tenant guessing, and what contains each one. - [Security Policy](https://turnframe.rs/docs/security-policy): How to report a vulnerability in Turnframe, which versions are supported, what counts as a security issue, and hardening guidance for applications. ## Project - [Benchmarks](https://turnframe.rs/docs/benchmarks): Microbenchmarks of the deterministic core and the pass rate of a live LLM corpus, with what each number shows and what it does not claim. - [Roadmap](https://turnframe.rs/docs/roadmap): What Turnframe leaves out of 0.1 on purpose: reads before understanding, MCP adapters, more providers, a macro layer and hosted evaluation. - [Release checklist and production-readiness gates](https://turnframe.rs/docs/release-checklist): The gates Turnframe must pass before it is called production-ready: safety, workflow, conversation, provider and operational checks, each with its evidence. - [Changelog](https://turnframe.rs/docs/changelog): Every notable change to Turnframe, the Rust library for deterministic conversational LLM workflows, in the Keep a Changelog format. - [Contributing to Turnframe](https://turnframe.rs/docs/contributing): How to contribute to Turnframe: the development setup, the local check sequence CI mirrors, what a pull request honours, and how to add an adapter or a store. ## Decision records - [Architecture decision records](https://turnframe.rs/docs/adr): The load-bearing decisions behind Turnframe: model output, reducers, events, cards, providers and effort, each with its alternatives and its enforcement. - [The LLM is an untrusted interpreter, not the command authority](https://turnframe.rs/docs/adr/001): Turnframe decision record 001, accepted 2026-09-05: The LLM is an untrusted interpreter, not the command authority. Its context, decision and enforcement. - [Flow Map is a pure workflow projector](https://turnframe.rs/docs/adr/002): Turnframe decision record 002, accepted 2026-09-05: Flow Map is a pure workflow projector. Its context, the decision, its consequences and how it is enforced. - [Lifecycle phase and obligations are separate](https://turnframe.rs/docs/adr/003): Turnframe decision record 003, accepted 2026-09-05: Lifecycle phase and obligations are separate. Its context, decision and enforcement. - [Persistent interactions own CTA semantics](https://turnframe.rs/docs/adr/004): Turnframe decision record 004, accepted 2026-09-05: Persistent interactions own CTA semantics. Its context, decision and enforcement. - [Domain events authorize operational claims](https://turnframe.rs/docs/adr/005): Turnframe decision record 005, accepted 2026-09-05: Domain events authorize operational claims. Its context, decision and enforcement. - [Optimistic concurrency and idempotency are mandatory](https://turnframe.rs/docs/adr/006): Turnframe decision record 006, accepted 2026-09-05: Optimistic concurrency and idempotency are mandatory. Its context, decision and enforcement. - [External actions use outbox/saga and explicit unknown outcomes](https://turnframe.rs/docs/adr/007): Turnframe decision record 007, accepted 2026-09-05: External actions use outbox/saga and explicit unknown outcomes. Its context, decision and enforcement. - [Provider capability routing and no silent downgrade](https://turnframe.rs/docs/adr/008): Turnframe decision record 008, accepted 2026-09-05: Provider capability routing and no silent downgrade. Its context, decision and enforcement. - [Controlled agentic mode is read-only before reduction](https://turnframe.rs/docs/adr/009): Turnframe decision record 009, accepted 2026-09-05: Controlled agentic mode is read-only before reduction. Its context, decision and enforcement. - [Ordered response blocks replace reply-plus-card side channels](https://turnframe.rs/docs/adr/010): Turnframe decision record 010, accepted 2026-09-05: Ordered response blocks replace reply-plus-card side channels. Its context, decision and enforcement. - [Typed generic domain APIs with internal type erasure (and no proc-macro DSL in 0.1)](https://turnframe.rs/docs/adr/011): Turnframe decision record 011, accepted 2026-09-05: Typed generic domain APIs with internal type erasure (and no proc-macro DSL in 0.1). - [Snapshot storage is allowed; the event journal remains mandatory for claims](https://turnframe.rs/docs/adr/012): Turnframe decision record 012, accepted 2026-09-05: Snapshot storage is allowed; the event journal remains mandatory for claims. - [Ambiguity creates an interaction and never a recency-based mutation target](https://turnframe.rs/docs/adr/013): Turnframe decision record 013, accepted 2026-09-05: Ambiguity creates an interaction and never a recency-based mutation target. - [Whole-turn reduction precedes effects](https://turnframe.rs/docs/adr/014): Turnframe decision record 014, accepted 2026-09-05: Whole-turn reduction precedes effects. Its context, the decision, its consequences and how it is enforced. - [Models judge language; code checks structure](https://turnframe.rs/docs/adr/015): Turnframe decision record 015, accepted 2026-09-26: Models judge language; code checks structure. Its context, decision and enforcement. - [Understanding is a bounded set of small verified model tasks](https://turnframe.rs/docs/adr/016): Turnframe decision record 016, accepted 2026-09-26: Understanding is a bounded set of small verified model tasks. Its context, decision and enforcement. - [A click authorizes exactly the commands its card names](https://turnframe.rs/docs/adr/017): Turnframe decision record 017, accepted 2026-09-26: A click authorizes exactly the commands its card names. Its context, decision and enforcement. - [Dependent acts are planned in their originating turn](https://turnframe.rs/docs/adr/018): Turnframe decision record 018, accepted 2026-09-26: Dependent acts are planned in their originating turn. Its context, decision and enforcement. - [The reply is written by small tasks and reviewed before it is shown](https://turnframe.rs/docs/adr/019): Turnframe decision record 019, accepted 2026-09-26: The reply is written by small tasks and reviewed before it is shown. Its context, decision and enforcement. - [Effort buys judgment, never authority](https://turnframe.rs/docs/adr/020): Turnframe decision record 020, accepted 2026-09-27: Effort buys judgment, never authority. Its context, the decision, its consequences and how it is enforced. ## Reference - [API reference](https://turnframe.rs/docs/api): The Rust API reference of Turnframe: rustdoc for the facade and every crate on docs.rs, how to build it locally, and the types to read first.