meetbot / docs
SDKs

Rust SDK (shipping Q4 2026)

Official meetbot crate. Async-first via tokio + reqwest, hand-written ergonomic facade over a progenitor-generated transport.

The Rust SDK is on the public roadmap for Q4 2026, after the Python (M6) and Go (Q3) SDKs land.

While we ship it, you have two viable paths:

  1. Use the OpenAPI spec directly with progenitor:
    [build-dependencies]
    progenitor = "0.7"
    // build.rs
    let spec = std::fs::read_to_string("meetbot.yaml")?;
    let mut generator = progenitor::Generator::default();
    let tokens = generator.generate_tokens(&serde_yaml::from_str(&spec)?)?;
    std::fs::write("src/generated.rs", prettyplease::unparse(&tokens.into()))?;
  2. Use the CLI via std::process::Command for one-shot ops.

Planned API shape

When the official Rust SDK lands, the surface will look like:

use meetbot::{Client, DispatchBotInput};

#[tokio::main]
async fn main() -> Result<(), meetbot::Error> {
    let mb = Client::builder()
        .api_key(std::env::var("MEETBOT_API_KEY")?)
        .build()?;

    let job = mb.dispatch_bot(DispatchBotInput {
        external_id: "lesson-2026-05-09-pavel".into(),
        meeting_url: "https://meet.google.com/abc-defg-hij".into(),
        display_name: Some("Acme Notetaker".into()),
        ..Default::default()
    }).await?;

    println!("dispatched {} → {:?}", job.id, job.status);
    Ok(())
}

Webhook verification:

use meetbot::verify_webhook_signature;

async fn handler(headers: HeaderMap, body: Bytes) -> StatusCode {
    let header = headers.get("x-meetbot-signature").and_then(|h| h.to_str().ok());
    let secret = std::env::var("MEETBOT_WEBHOOK_SECRET").unwrap();
    if !verify_webhook_signature(&body, header, &secret) {
        return StatusCode::UNAUTHORIZED;
    }
    // parse + handle
    StatusCode::OK
}

Distribution

  • crates.io name: meetbot (we'll reserve before Q4)
  • MSRV (minimum supported Rust version): 1.78, locked at ship.
  • Async-first via tokio + reqwest. Sync facade via tokio::runtime::Runtime::block_on if customer demand emerges.
  • serde + serde_json for models; no pydantic-style runtime validation — Rust's type system does that statically.

Status

🚧 In design. The crate skeleton lives at packages/sdk-rust/ in the monorepo. Tracked in github.com/meetbot-dev/meetbot/milestones.

For build philosophy + codegen-vs-handwritten tradeoffs, see docs/sdk-shipping-strategy.md.

See also

On this page