| Crates.io | metabase |
| lib.rs | metabase |
| version | 0.1.1 |
| created_at | 2026-01-02 08:13:33.367076+00 |
| updated_at | 2026-01-02 08:13:33.367076+00 |
| description | Ergonomic Rust SDK for Metabase's HTTP API, with async and blocking clients. |
| homepage | https://github.com/lvillis/metabase-rs |
| repository | https://github.com/lvillis/metabase-rs |
| max_upload_size | |
| id | 2018140 |
| size | 638,891 |
metabase-rsErgonomic Rust SDK for Metabase's HTTP API, with async and blocking clients.
Client (default, reqwest + rustls)BlockingClient (--features blocking, ureq + rustls)tracing, metricscargo add metabase
# blocking-only:
cargo add metabase --no-default-features --features blocking
# with observability:
cargo add metabase --features tracing,metrics
use metabase::{Auth, Client};
# async fn demo() -> Result<(), metabase::Error> {
let client = Client::builder("https://metabase.example.com")?
.auth(Auth::session("SESSION_TOKEN")) // or: Auth::api_key("API_KEY")
.build()?;
let me = client.user().get_current().await?;
println!("{me:?}");
# Ok(())
# }
use metabase::{Auth, BlockingClient};
fn demo() -> Result<(), metabase::Error> {
let client = BlockingClient::builder("https://metabase.example.com")?
.auth(Auth::session("SESSION_TOKEN"))
.build()?;
let health = client.health().get()?;
println!("{health:?}");
Ok(())
}
# use metabase::{Client, Error};
# async fn demo() -> Result<(), Error> {
# let client = Client::builder("https://metabase.example.com")?.build()?;
if let Err(err) = client.health().get().await {
eprintln!("{err} status={:?} request_id={:?}", err.status(), err.request_id());
}
# Ok(())
# }