Crate supabase_client_rs

Crate supabase_client_rs 

Source
Expand description

§supabase-client-rs

A Rust client for Supabase, the open-source Firebase alternative.

This crate provides a unified interface to Supabase services by composing existing community crates:

  • Database: Uses postgrest-rs for PostgREST queries
  • Realtime: Integrates with supabase-realtime-rs
  • Auth, Storage, Functions: Extensible via traits for community implementations

§Quick Start

use supabase_client_rs::SupabaseClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a client
    let client = SupabaseClient::new(
        "https://your-project.supabase.co",
        "your-anon-key"
    )?;

    // Query the database
    let response = client
        .from("users")
        .select("id, name, email")
        .eq("active", "true")
        .execute()
        .await?;

    let body = response.text().await?;
    println!("Users: {}", body);

    Ok(())
}

§Database Queries

The client wraps postgrest-rs and provides a fluent API for database operations:

// Select with filters
let users = client
    .from("users")
    .select("*")
    .eq("status", "active")
    .order("created_at.desc")
    .limit(10)
    .execute()
    .await?;

// Insert
let new_user = client
    .from("users")
    .insert(r#"{"name": "Alice", "email": "alice@example.com"}"#)
    .execute()
    .await?;

// Update
let updated = client
    .from("users")
    .update(r#"{"status": "inactive"}"#)
    .eq("id", "123")
    .execute()
    .await?;

// Delete
let deleted = client
    .from("users")
    .delete()
    .eq("id", "123")
    .execute()
    .await?;

// RPC (stored procedures)
let result = client
    .rpc("get_user_stats", r#"{"user_id": "123"}"#)
    .execute()
    .await?;

§Configuration

For advanced configuration, use SupabaseConfig:

use supabase_client_rs::{SupabaseClient, SupabaseConfig};
use std::time::Duration;

let config = SupabaseConfig::new(
    "https://your-project.supabase.co",
    "your-anon-key"
)
.schema("custom_schema")
.timeout(Duration::from_secs(60))
.header("X-Custom-Header", "value");

let client = SupabaseClient::with_config(config).unwrap();

§Authenticated Requests

After a user signs in, set their JWT:

// Get JWT from your auth flow
let user_jwt = "eyJhbGciOiJIUzI1NiIs...";

// Create an authenticated client
let auth_client = client.with_jwt(user_jwt)?;

// Now requests include the user's JWT
// RLS policies will apply based on the user

§Extending with Community Crates

This crate defines traits for auth, storage, and functions that community crates can implement. See the traits module for details.

§Feature Flags

  • rustls (default): Use rustls for TLS
  • native-tls: Use native TLS instead of rustls
  • realtime: Enable Supabase Realtime support (requires supabase-realtime-rs)

Re-exports§

pub use postgrest;

Modules§

traits
Traits for extensibility and future community crates.

Structs§

SupabaseClient
The main Supabase client.
SupabaseConfig
Configuration options for the Supabase client.

Enums§

Error
The main error type for Supabase operations.

Functions§

create_client
Create a new Supabase client.

Type Aliases§

Result
A specialized Result type for Supabase operations.