Skip to main content

claude_code/
lib.rs

1//! # claude-code
2//!
3//! **Unofficial** Rust client for the [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code).
4//!
5//! This crate runs `claude --print` as a subprocess and provides type-safe access to the results.
6//! It supports single-shot JSON responses, real-time streaming via `stream-json`, multi-turn
7//! conversations, and structured output with JSON Schema.
8//!
9//! ## Quick Start
10//!
11//! ```rust,no_run
12//! # #[tokio::main]
13//! # async fn main() -> Result<(), claude_code::ClaudeError> {
14//! let client = claude_code::ClaudeClient::new(claude_code::ClaudeConfig::default());
15//! let response = client.ask("Say hello").await?;
16//! println!("{}", response.result);
17//! # Ok(())
18//! # }
19//! ```
20//!
21//! ## Feature Flags
22//!
23//! | Feature | Default | Description |
24//! |---|---|---|
25//! | `stream` | Yes | Enables [`StreamEvent`], streaming methods, and re-exports [`StreamExt`]. |
26//! | `structured` | Yes | Enables [`generate_schema`] for JSON Schema generation. |
27//! | `tracing` | Yes | Enables debug/error/info logging via `tracing`. |
28
29#![cfg_attr(docsrs, feature(doc_cfg))]
30#![warn(missing_docs)]
31
32mod client;
33mod config;
34mod conversation;
35mod error;
36#[cfg(feature = "stream")]
37mod stream;
38#[cfg(feature = "structured")]
39mod structured;
40mod types;
41
42pub use client::{ClaudeClient, CommandRunner, DefaultRunner, check_cli};
43pub use config::{ClaudeConfig, ClaudeConfigBuilder, effort, permission_mode};
44pub use conversation::Conversation;
45pub use error::ClaudeError;
46#[cfg(feature = "stream")]
47#[cfg_attr(docsrs, doc(cfg(feature = "stream")))]
48pub use stream::StreamEvent;
49#[cfg(feature = "structured")]
50#[cfg_attr(docsrs, doc(cfg(feature = "structured")))]
51pub use structured::generate_schema;
52#[cfg(feature = "stream")]
53#[cfg_attr(docsrs, doc(cfg(feature = "stream")))]
54pub use tokio_stream::StreamExt;
55pub use types::{ClaudeResponse, Usage};