perplexity-cli
🧠 A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! 🚀🚀🚀
⚙️🦀 Build modular and scalable LLM Applications in Rust
📑 Docs
•
🌐 Website
•
🤝 Contribute
•
✍🏽 Blogs
•
![]()
✨ If you would like to help spread the word about Rig, please consider starring the repo!
Warning
Here be dragons! As we plan to ship a torrent of features in the following months, future updates will contain breaking changes. With Rig evolving, we'll annotate changes and highlight migration paths as we encounter them.
Rig is a Rust library for building scalable, modular, and ergonomic LLM-powered applications.
More information about this crate can be found in the official and crate API reference documentation.
wasm32-unknown-unknown) support for the portable core and
classic runtime — see target support
for the full matrix (WASI is not supported; rmcp is native-only)Rig separates portable provider/backend contracts from agent orchestration:
rig-core contains provider-neutral messages, completion models, portable tools,
memory and vector-store contracts, and built-in provider mappings.rig-agent contains the classic builder, prompt/streaming traits, typed hooks,
contextual tools, extraction, and the serializable AgentRun state machine. It
remains enabled by default.The root rig facade re-exports both at their familiar paths, so most code
depends only on rig.
Below is a non-exhaustive list of companies and people who are using Rig:
proteinpaint, a genomics visualisation tool.rig for simplifying LLM calls and implementing the model picker.For a curated list of Rig projects, libraries, tools, articles, and production users, check out awesome-rig.
Are you also using Rig? Open an issue to have your name added!
Use the root rig facade when you want feature-gated access to companion crates,
or use rig-core directly when you only need the core provider abstractions.
cargo add rig # or: cargo add rig-core
use rig::prelude::*;
use rig::providers::openai;
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
// Create OpenAI client
let client = openai::Client::from_env()?;
// Create agent with a single context prompt
let comedian_agent = client
.agent(openai::GPT_5_2)
.preamble("You are a comedian here to entertain the user using humour and jokes.")
.build();
// Prompt the agent and print the response
let response = comedian_agent.prompt("Entertain me!").await?;
println!("{response}");
Ok(())
}
Note using #[tokio::main] requires you enable tokio's macros and rt-multi-thread features
or just full to enable all features (cargo add tokio --features macros,rt-multi-thread).
You can find more examples in each crate's examples directory (for example, examples). Provider-specific integration coverage lives under tests/providers, with cassette-backed tests that replay offline by default and live-only tests kept separate when real provider APIs are still required. See tests/README.md for test target, replay, record, and cassette safety commands. More detailed use case walkthroughs are regularly published on our Dev.to Blog and added to Rig's official documentation at rig.rs/docs.
The root rig facade exposes companion crates behind one feature per integration:
rig = { version = "0.36.0", features = ["lancedb", "fastembed"] }
| Integration | Crate | Feature | Module path |
|---|---|---|---|
| AWS Bedrock | rig-bedrock |
bedrock |
rig::bedrock |
| AWS S3Vectors | rig-s3vectors |
s3vectors |
rig::s3vectors |
| Candle (local Llama/SmolLM2/Qwen3 tools) | rig-candle |
candle |
rig::candle |
| Cloudflare Vectorize | rig-vectorize |
vectorize |
rig::vectorize |
| FastEmbed | rig-fastembed |
fastembed |
rig::fastembed |
| Google Gemini gRPC | rig-gemini-grpc |
gemini-grpc |
rig::gemini_grpc |
| Google Vertex AI | rig-vertexai |
vertexai |
rig::vertexai |
| HelixDB | rig-helixdb |
helixdb |
rig::helixdb |
| LanceDB | rig-lancedb |
lancedb |
rig::lancedb |
| Memory policies | rig-memory |
memory |
rig::memory |
| Milvus | rig-milvus |
milvus |
rig::milvus |
| MongoDB | rig-mongodb |
mongodb |
rig::mongodb |
| Neo4j | rig-neo4j |
neo4j |
rig::neo4j |
| PostgreSQL | rig-postgres |
postgres |
rig::postgres |
| Qdrant | rig-qdrant |
qdrant |
rig::qdrant |
| ScyllaDB | rig-scylladb |
scylladb |
rig::scylladb |
| SQLite | rig-sqlite |
sqlite |
rig::sqlite |
| SurrealDB | rig-surrealdb |
surrealdb |
rig::surrealdb |
rig::memory is available without the memory feature; it contains the core
conversation memory traits and in-memory backend re-exported from rig-core.
Enabling features = ["memory"] adds reusable history-shaping policy types from
the rig-memory companion crate to the same module.
We also have some other associated crates that have additional functionality you may find helpful when using Rig:
rig-onchain-kit - the Rig Onchain Kit. Intended to make interactions between Solana/EVM and Rig much easier to implement.more like this
🧠 A simple command-line client for the Perplexity API. Ask questions and receive answers directly from the terminal! 🚀🚀🚀
A to-do list that runs your Claude Code agents — capture anywhere, dispatch in parallel, review from your phone.
Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…
search projects, people, and tags