Rig logo

       
    stars - rig

 
[📑 Docs](https://rig.rs/docs)   •   [🌐 Website](https://rig.rs)   •   [🤝 Contribute](https://github.com/0xPlaygrounds/rig/issues/new)   •   [✍🏽 Blogs](https://rig.rs/docs/guides)   •   Ryzome
Rig is a Rust library for building LLM applications, and `rig`, a terminal coding agent built on it that you extend with Bevy plugins. ## The coding agent ```bash cargo install rig rig ``` In the agent, `/login` signs in with a ChatGPT plan or saves a provider's API key, or export the key (such as `OPENAI_API_KEY`) before starting. `/model` picks the model and `/help` lists the commands. `rig -p "fix the failing test"` answers one prompt without the terminal view. - **Everything is a plugin.** The agent is a [Bevy](https://bevy.org) app; its tools, commands, sessions, sign-in and terminal view are each a plugin listed in `plugins.toml`, so any of them can be removed, replaced or added to. - **It rebuilds itself.** `/reload` rebuilds the agent with your plugin changes and restarts it in the same session, and keeps the old build running if the new one does not compile. - **Scriptable.** `rig -p --json` and `rig --json` drive it over pipes; `rig help-agents` is the protocol. - **More when you want it.** Subagents and checkpoints of what `shell` changed are optional plugins, and the tools work on remote hosts over ssh or any command. The [agent guide](docs/agent.md) covers the keys, sessions, compaction, plugins and files, and the [plugin guide](crates/rig-harness/PLUGINS.md) shows how to write a tool, command or panel. The agent needs Rust 1.97.1 or newer and runs on Linux and macOS. ## The library ```bash cargo add rig ``` ```rust use rig::prelude::*; use rig::providers::openai::{self, OpenAI}; #[tokio::main] async fn main() -> Result<(), anyhow::Error> { // The client reads `OPENAI_API_KEY` and builds the models it serves. let model = OpenAI::from_env()?.completion(openai::GPT_6_1_SOL); let comedian = AgentBuilder::new(model) .preamble("You are a comedian here to entertain the user using humour and jokes.") .build(); let response = comedian.prompt("Entertain me!").await?; println!("{}", response.output()); Ok(()) } ``` `#[tokio::main]` needs tokio's `macros` and `rt-multi-thread` features (`cargo add tokio --features macros,rt-multi-thread`). - 20+ model providers and 10+ vector stores, each under one interface - Agents with tools, multi-turn streaming and typed hooks - Completion, embedding, transcription, audio and image generation - [GenAI semantic conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/) for OpenTelemetry - Recording and replay of an agent's effects ([`rig-cassette`](crates/rig-cassette/README.md)) - Browser WASM (`wasm32-unknown-unknown`) for the core and the agent runtime ([target support](crates/rig-agent/README.md#target-support)) More in [`examples/`](examples), the [docs](https://rig.rs/docs) and the [API reference](https://docs.rs/rig/latest/rig/). `rig-core` no longer forces serde_json's `preserve_order` or `float_roundtrip` features. Without them, JSON object keys sort by name, including schema properties and JSON text embedded in prompts, embeddings and tool results. Parsing floating-point numbers can change their low bits. To restore the previous configuration, add this to your application's `Cargo.toml` dependencies: ```toml serde_json = { version = "1", features = ["preserve_order", "float_roundtrip"] } ``` Cargo unifies features across dependencies. `rig-cassette` with `traffic` (and therefore `rig-traffic`) still enables both features. `rig-claude-cloak` and `rig-mongodb` through BSON still enable `preserve_order`. These are application-level serde_json choices; Rig has no forwarding feature. ## Crates The `rig` crate re-exports the core and the agent runtime, and each companion crate behind a feature. | Crate | What it is | | --- | --- | | [`rig-core`](crates/rig-core) | Provider-neutral messages, completion and embedding models, tool contracts, the conversation type, vector-store contracts, and the providers | | [`rig-agent`](crates/rig-agent) | The agent builder, prompting and streaming, hooks, the tool registry and the serializable `AgentRun` | | [`rig-memory`](crates/rig-memory) | Windows, compaction, and saving, resuming and forking conversations | | [`rig-cassette`](crates/rig-cassette) | Effect logs: recording, replay and checkpoints | | [`rig-tools`](crates/rig-tools) | Coding tools any rig agent can use: read, write, edit, search, shell | | [`rig-ecs`](crates/rig-ecs), [`rig-harness`](crates/rig-harness) | The agent kernel on Bevy's ECS, and the harness the coding agent's plugins build on | | [`rig-tui`](plugins/rig-tui), [`rig-basics`](plugins/rig-basics) | The terminal view, and the coding agent's default plugins | | [`rig-traffic`](plugins/rig-traffic) | Opt-in provider HTTP recording in the session store, using the cassette engine | ### Integrations ```toml rig = { version = "0.44.0", features = ["lancedb", "fastembed"] } ``` | Integration | Crate | Feature | Module path | | --- | --- | --- | --- | | AWS Bedrock | [`rig-bedrock`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-bedrock) | `bedrock` | `rig::bedrock` | | AWS S3Vectors | [`rig-s3vectors`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-s3vectors) | `s3vectors` | `rig::s3vectors` | | Candle (local Llama/SmolLM2/Qwen3 tools, YOLOv8 pose) | [`rig-candle`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-candle) | `candle` | `rig::candle` | | Cloudflare Vectorize | [`rig-vectorize`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-vectorize) | `vectorize` | `rig::vectorize` | | FastEmbed | [`rig-fastembed`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-fastembed) | `fastembed` | `rig::fastembed` | | Google Gemini gRPC | [`rig-gemini-grpc`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-gemini-grpc) | `gemini-grpc` | `rig::gemini_grpc` | | Google Vertex AI | [`rig-vertexai`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-vertexai) | `vertexai` | `rig::vertexai` | | HelixDB | [`rig-helixdb`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-helixdb) | `helixdb` | `rig::helixdb` | | LanceDB | [`rig-lancedb`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-lancedb) | `lancedb` | `rig::lancedb` | | Conversations over time | [`rig-memory`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-memory) | `memory` | `rig::memory` | | Milvus | [`rig-milvus`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-milvus) | `milvus` | `rig::milvus` | | MongoDB | [`rig-mongodb`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-mongodb) | `mongodb` | `rig::mongodb` | | Neo4j | [`rig-neo4j`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-neo4j) | `neo4j` | `rig::neo4j` | | PostgreSQL (vector store; with `memory`, a session store) | [`rig-postgres`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-postgres) | `postgres` | `rig::postgres` | | Qdrant | [`rig-qdrant`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-qdrant) | `qdrant` | `rig::qdrant` | | ScyllaDB | [`rig-scylladb`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-scylladb) | `scylladb` | `rig::scylladb` | | SQLite (vector store; with `memory`, a session store) | [`rig-sqlite`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-sqlite) | `sqlite` | `rig::sqlite` | | SurrealDB | [`rig-surrealdb`](https://github.com/0xPlaygrounds/rig/tree/main/crates/rig-surrealdb) | `surrealdb` | `rig::surrealdb` | | TypeSafe Jev (experimental judgments) | [`rig-typesafeai`](crates/rig-typesafeai) | `typesafeai` | `rig::typesafeai` | ## Community Projects built on Rig are listed in [awesome-rig](https://github.com/0xPlaygrounds/awesome-rig); open a pull request there to add yours. Questions and ideas are welcome on [Discord](https://discord.gg/playgrounds), and [CONTRIBUTING.md](CONTRIBUTING.md) says how to contribute. Rig is MIT licensed. > [!WARNING] > Rig is pre-1.0. Releases contain breaking changes; each release's > [changelog](CHANGELOG.md) and [migration notes](MIGRATING.md) say what > changed and how to move.



Build by Playgrounds