O poder do Spring Data,
a precisão do Rust.
O padrão repository familiar para o ecossistema Rust. CRUD genérico para sqlx e MongoDB com segurança em tempo de compilação e zero boilerplate.
Integração perfeita com o ecossistema Rust
Escolha seu caminho
Migrando do Diesel?
Veja como nossa API mapeia os conceitos do Diesel e aprenda a migrar seus modelos.
Ler guia arrow_forwardEscalando com MongoDB?
Descubra nossa integração NoSQL fluida e o suporte a tipos BSON.
Explorar NoSQL arrow_forwardNovo no Rust Data?
Comece com nosso guia rápido completo e construa seu primeiro app em minutos.
Início rápido arrow_forwardAcesso a dados, oxidado.
Pare de escrever as mesmas consultas básicas repetidamente. Foque na sua lógica de domínio enquanto o RustData cuida da camada de persistência.
Repositórios CRUD
save, find_by_id, find_all, update e delete gerados automaticamente.
Colunas type-safe
A validação de consultas em compilação evita erros em execução.
Joins/Relações
API ergonômica para Um-para-Muitos e Muitos-para-Muitos.
Transações
Gestão transacional fluida entre operações.
Exclusão lógica
Suporte integrado a padrões de exclusão lógica. Filtra automaticamente os registros excluídos sem modificar suas consultas.
Geração de API REST
Recurso opcional para gerar rotas axum automaticamente a partir dos seus repositórios.
Migrações
Gestão de migrações de esquema integrada nativamente em código.
Multi-tenancy e cache
Suporte de primeira classe para isolamento por tenant e camadas de cache distribuída (Redis/Memcached) integradas às abstrações de repositório.
Desempenho profissional
Abstrações de custo zero trazem a conveniência do padrão repository sem sacrificar o desempenho bruto do banco de dados.
Throughput (req/s) — maior é melhor
* Benchmarks executados em AWS c6i.2xlarge contra Postgres 15. Consultas SELECT simples.
Como ele se compara
Escolher a crate de persistência certa é essencial. Veja onde o rustdata se encaixa no ecossistema de bancos de dados Rust em 2026.
| Característica | rustdata | Diesel | SeaORM | sqlx | rusqlite |
|---|---|---|---|---|---|
| Categoria | cancel Fachada repository + ORM | cancel ORM completo (DSL tipada) | cancel ORM assíncrono (ActiveRecord) | cancel Toolkit SQL (não é um ORM) | cancel Wrapper leve de SQLite |
| Última versão | cancel v0.1.0-alpha | cancel 2.3.6 | cancel 2.0 | cancel 0.8.6 | cancel 0.38.0 |
| Backends | cancel SQL + MongoDB | cancel Apenas SQL | cancel Apenas SQL | cancel Postgres · MySQL · SQLite · MSSQL | cancel Apenas SQLite |
| Padrão repository e CRUD gerado | check_circle De primeira classe | cancel Manual | remove_circle_outline Active Record | cancel Manual | cancel Manual |
| Verificação em compilação | check_circle Queries validadas por macros | check_circle DSL tipada | cancel Só em execução | check_circle query! contra schema real | cancel Só em execução |
| Assíncrono por padrão | check_circle Sim | remove_circle_outline via diesel-async | check_circle Sim | check_circle Sim | cancel Não — só síncrono |
| Migrações integradas | check_circle Integradas | check_circle Integradas | check_circle Integradas | cancel De terceiros | cancel De terceiros |
| Curva de aprendizado | check_circle Baixa — estilo Spring | cancel Íngreme | check_circle Suave — devs Rails/Django | check_circle Baixa se você sabe SQL | cancel Mínima |
* Panorama do início de 2026: Diesel 2.3.6 · SQLx 0.8.6 · SeaORM 2.0 · rusqlite 0.38.0.
Máxima segurança em tempo de compilação?
A DSL tipada do Diesel verifica cada consulta contra seu schema — ao custo de uma curva de aprendizado mais íngreme.
Prefere escrever SQL puro?
O sqlx valida queries cruas em compilação contra um schema real — mas repositórios e relações ficam por sua conta.
Quer os dois — sem boilerplate?
O rustdata gera repositórios verificados em compilação sobre sqlx e MongoDB, com a ergonomia familiar do Spring.
Menos boilerplate.
use rustdata::prelude::*;
#[derive(Entity, Debug, Clone)]
pub struct User {
pub id: Uuid,
pub email: String,
pub status: UserStatus,
}
// That's it. Generates findAll, findById, save, delete...
#[repository]
pub trait UserRepository: CrudRepository<User, Uuid> {
// Custom queries are type-checked at compile time!
async fn find_by_status(&self, status: UserStatus) -> Result<Vec<User>>;
} SELECT id, email, status
FROM users
WHERE status = $1; Prova em tempo de compilação
Capture erros antes da produção. Typos em queries falham na compilação.
Compiling rustdata-example v0.1.0 error[E0412]: cannot find field `sttaus` in `User` --> src/repositories.rs:12:35 | 12 | async fn find_by_sttaus(&self, sttaus: UserStatus) -> Result<Vec<User>>; | ^^^^^^ help: a field with a similar name exists: `status` | = note: rustdata macro generated query validation failed error: could not compile `rustdata-example` due to previous error
Arquitetura de crate fachada
rustdata é uma crate fachada projetada para manter suas dependências limpas. Re-exporta elegantemente tudo que você precisa do nosso ecossistema modular.
- rustdata-core // Traits and types
- rustdata-macros // #[derive(Entity)], #[crud]
- rustdata-migrations // Schema management
# Cargo.toml [dependencies] rustdata = { version = "0.1", features = ["postgres"] } tokio = { version = "1.0", features = ["full"] }
Persistência
declarativa
Defina suas entidades uma vez. Nossas macros poderosas geram implementações robustas e eficientes de repositórios em tempo de compilação.
- check_circle Paginação e filtragem automáticos
- check_circle Validação de schema em compilação
- check_circle Assíncrono por padrão
// Migration // CREATE TABLE users (id UUID PRIMARY KEY, name VARCHAR(255) NOT NULL); use rustdata::prelude::*; #[derive(Entity, Debug, Clone)] pub struct User { id: Uuid, name: String, } #[crud(entity = User)] trait UserRepository {} #[tokio::main] async fn main() -> Result<()> { let db = Database::connect("postgres://...").await?; let repo = UserRepositoryImpl::new(db); let user = User { id: Uuid::new_v4(), name: "Alice".to_string(), }; repo.save(&user).await?; let found = repo.find_by_id(user.id).await?; Ok(()) }