sntl 0.1.0

Compile-time guarded ORM for PostgreSQL — your data's guardian from compile to production
Documentation

sentinel

Compile-time guarded ORM for PostgreSQL — your data's guardian from compile to production.

CI codecov

crates.io sntl crates.io sntl-core crates.io sntl-macros docs.rs

Rust Tokio PostgreSQL rustls


N+1 queries, over-fetching, unsafe relation access — caught at compile time, not production.

Quick Start

[dependencies]
sntl = "0.1"
use sntl::prelude::*;

#[derive(Model)]
#[model(table = "users")]
struct User {
    #[primary_key]
    id: i64,
    name: String,
    email: String,
}

#[tokio::main]
async fn main() -> Result<(), sntl::core::Error> {
    let config = Config::parse("postgres://user:pass@localhost/mydb")?;
    let pool = Pool::connect(config, 10).await?;
    let conn = pool.get().await?;

    // Type-safe query — wrong column names won't compile
    let users = User::select()
        .filter(User::EMAIL.eq("alice@example.com"))
        .fetch_all(&conn)
        .await?;

    Ok(())
}

Features

  • Compile-time guards — N+1, over-fetching, and unsafe relation access caught before runtime
  • Type-state relationsUser<Bare> vs User<WithPosts>, compile error on unloaded access
  • Partial types#[derive(Partial)] generates narrow select types, no over-fetching
  • Reducer pattern#[reducer] for transactions with auto-commit/rollback
  • Deadlock prevention — auto-reorder locks by ID
  • 4-layer query system — from simple CRUD to raw SQL, always type-safe, always parameterized
  • Zero unsafe in core — security by construction
  • Built on sentinel-driver — SCRAM-SHA-256, pipeline mode, binary format, rustls

Architecture

crates/
├── sntl           # Umbrella crate — cargo add sntl, ready to go
├── sntl-core      # Model trait, QueryBuilder, types, connection
├── sntl-macros    # derive(Model), derive(Partial), #[reducer]
├── sntl-migrate   # Schema diff, migration generation
└── sntl-cli       # CLI binary (sentinel command)

Development

cargo check --workspace                                # Type check
cargo test --workspace                                 # Run all tests
cargo clippy --workspace --all-targets -- -D warnings  # Lint
cargo fmt --all                                        # Format

MSRV

Rust 1.85 (declared via rust-version in Cargo.toml).

License

Licensed under either of:

at your option.