Expand description
§ormkit
A comprehensive ORM layer for SQLx that combines Diesel’s compile-time guarantees with SeaORM’s developer ergonomics.
§Features
- Hybrid Type Safety: Always-on type safety without DATABASE_URL + optional CI validation
- ActiveModel Pattern: Track field changes for efficient partial updates
- Entity Generation: Generate entities from database schema
- Derive Macros: Automatic implementation of traits
- Advanced Relationships: Auto-loading, eager/lazy loading with N+1 prevention
- Query Builder DSL: Type-safe dynamic query construction
- Pagination: Built-in offset and cursor-based pagination
- Transaction Management: Automatic commit/rollback with transaction guards
- Repository Pattern: Generic CRUD operations for any entity
- Batch Operations: Efficient bulk inserts, updates, and deletes
§Quick Start
use ormkit::{Entity, ActiveModelTrait, Repository};
use ormkit::active_value::ActiveValue;
#[derive(ormkit::Entity)]
#[ormkit(table = "users")]
struct User {
#[ormkit(id)]
id: Uuid,
email: String,
name: String,
}
// Using Repository
let repo = Repository::new(&pool);
// Find by ID
let user = repo.find_by_id(user_id).await?;
// Insert with ActiveModel
let mut user = UserActiveModel::default();
user.email = ActiveValue::Set("user@example.com".to_string());
user.name = ActiveValue::Set("John".to_string());
let user = repo.insert(user).await?;
// Pagination
use ormkit::pagination::{PaginationRequest, Paginator};
let page = User::fetch_paginated(&pool, &PaginationRequest::new(1, 20)).await?;
// Relationships
use ormkit::relations::{RelationBuilder, BelongsTo};
let posts_with_users = RelationBuilder::for_entities(posts)
.load::<User>(&pool)
.await?;
// Transactions
use ormkit::transaction::transaction;
let result = transaction(&pool, |tx| async move {
// Multiple operations
Ok(())
}).await?;Re-exports§
pub use crate::active_value::ActiveValue;pub use crate::active_model::ActiveModelTrait;pub use crate::active_model::ChangeTracker;pub use crate::entity::Entity;pub use crate::query::Expr;pub use crate::query::ExprNode;pub use crate::query::Filter;pub use crate::query::FilterOp;pub use crate::query::JoinType;pub use crate::query::LogicOp;pub use crate::query::Order;pub use crate::query::OrderExpr;pub use crate::query::QueryBuilder;pub use crate::query::typed::Column;pub use crate::query::typed::ColumnRef;pub use crate::query::typed::FilterExpr;pub use crate::query::typed::TypedQueryBuilder;pub use crate::schema::Table;pub use crate::relations::BelongsTo;pub use crate::relations::HasMany;pub use crate::relations::RelationBuilder;pub use crate::relations::Loaded;pub use crate::relations::LoadError;pub use crate::relations::LoadStrategy;pub use crate::relations::RelationMeta;pub use crate::relations::RelationLoader;pub use crate::relations::HasManyLoader;pub use crate::pagination::Paginated;pub use crate::pagination::CursorPaginated;pub use crate::pagination::Cursor;pub use crate::pagination::CursorDirection;pub use crate::pagination::Paginator;pub use crate::pagination::PaginationError;pub use crate::pagination::PaginationMeta;pub use crate::pagination::PaginationRequest;pub use crate::pagination::DEFAULT_PER_PAGE;pub use crate::pagination::MAX_PER_PAGE;pub use crate::transaction::Transaction;pub use crate::transaction::IsolationLevel;pub use crate::transaction::TransactionError;pub use crate::transaction::TransactionResult;pub use crate::transaction::transaction;pub use crate::transaction::transaction_with_isolation;pub use crate::repository::Repository;pub use crate::repository::RepositoryError;pub use crate::repository::RepositoryResult;pub use crate::batch::insert_many;pub use crate::batch::update_many;pub use crate::batch::delete_many;pub use crate::batch::execute_batch;pub use crate::batch::BatchOptions;pub use crate::batch::BatchResult;pub use crate::batch::BatchResultInfo;pub use crate::batch::BatchError;pub use crate::batch::DEFAULT_BATCH_SIZE;pub use crate::batch::MAX_BATCH_SIZE;
Modules§
- active_
model - ActiveModel trait for change tracking and CRUD operations
- active_
value - ActiveValue tracks field changes for ActiveModel pattern
- batch
- Batch operations for efficient bulk database operations
- entity
- Core Entity trait for ORM models
- macros
- Public macro module for ormkit
- pagination
- Pagination support for query results
- query
- Query Builder DSL
- relations
- Relationship management for ORM entities
- repository
- Repository pattern for generic CRUD operations
- schema
- Schema Type Generation System
- transaction
- Transaction management for ORM operations
Derive Macros§
- Entity
- Derive macro for implementing Entity trait