Nicheloom

Market intelligence for builders — see what's gaining traction before it's crowded.

Oxyde

Pydantic-native async ORM with a Rust core

Details

External ID
47364260
Source
HN
Company
—
Product
Oxyde
Website domain
github.com
Launched
March 13, 2026
Cohort
—
Upvotes
155
Upvotes percentile
0.9477244772447725
Tags
—
Fetched at
Sept. 7, 2026, 9:26 p.m.
Updated at
Sept. 7, 2026, 9:26 p.m.

Description

Hi HN! I built Oxyde because I was tired of duplicating my models.If you use FastAPI, you know the drill. You define Pydantic models for your API, then define separate ORM models for your database, then write converters between them. SQLModel tries to fix this but it's still SQLAlchemy underneath. Tortoise gives you a nice Django-style API but its own model system. Django ORM is great but welded to the framework.I wanted something simple: your Pydantic model IS your database model. One class, full validation on input and output, native type hints, zero duplication. The query API is Django-style (.objects.filter(), .exclude(), Q/F expressions) because I think it's one of the best designs out there.Explicit over implicit. I tried to remove all the magic. Queries don't touch the database until you call a terminal method like .all(), .get(), or .first(). If you don't explicitly call .join() or .prefetch(), related data won't be loaded. No lazy loading, no surprise N+1 queries behind your back. You see exactly what hits the database by reading the code.Type safety was a big motivation. Python's weak spot is runtime surprises, so Oxyde tackles this on three levels: (1) when you run makemigrations, it also generates .pyi stub files with fully typed queries, so your IDE knows that filter(age__gte=...) takes an int, that create() accepts exactly the fields your model has, and that .all() returns list[User] not list[Any]; (2) Pydantic validates data going into the database; (3) Pydantic validates data coming back out via model_validate(). You get autocompletion, red squiggles on typos, and runtime guarantees, all from the same model definition.Why Rust? Not for speed as a goal. I don't do "language X is better" debates. Each one is good at what it was made for. Python is hard to beat for expressing business logic. But infrastructure stuff like SQL generation, connection pooling, and row serialization is where a systems language makes sense. So I split it: Python handles your models and business logic, Rust handles the database plumbing. Queries are built as an IR in Python, serialized via MessagePack, sent to Rust which generates dialect-specific SQL, executes it, and streams results back. Speed is a side effect of this split, not the goal. But since you're not paying a performance tax for the convenience, here are the benchmarks if curious: https://oxyde.fatalyst.dev/latest/advanced/benchmarks/What's there today: Django-style migrations (makemigrations / migrate), transactions with savepoints, joins and prefetch, PostgreSQL + SQLite + MySQL, FastAPI integration, and an auto-generated admin panel that works with FastAPI, Litestar, Sanic, Quart, and Falcon (https://github.com/mr-fatalyst/oxyde-admin).It's v0.5, beta, active development, API might still change. This is my attempt to build the ORM I personally wanted to use. Would love feedback, criticism, ideas.Docs: https://oxyde.fatalyst.dev/Step-by-step FastAPI tutorial (blog API from scratch): https://github.com/mr-fatalyst/fastapi-oxyde-example

Enrichment

Theme
database infrastructure and developer tools
Vertical
Horizontal
Function
Dev tools
Audience
Developer
AI stance
Not AI
Project type
Commercial product
Normalized one-liner
async orm with rust backend
Manually corrected
False

Could you build this?

No Writing a high-performance database engine or ORM core with Rust bindings (PyO3) and integrating deep async Pydantic metaclass inspection requires advanced systems and compiler-adjacent skills.

What it would actually take: Building this requires a Rust core utilizing SQLx or custom AST query builders exposed via PyO3 to Python, integrated into Pydantic v2's Rust core (pydantic-core). The hard challenges include handling cross-language async event loops (Python asyncio to Tokio), zero-copy deserialization from database wire formats into Python objects, and constructing an expressive SQL AST that supports complex migrations, joins, and transactions.

Discussion

20 comments analyzed.

Competitors mentioned: Django ORM, SQLAlchemy, FastAPI with manual schemas, django-ninja, attrs/dataclasses

Concerns raised: Type checker doesn't recognize some generated types (young project), ActiveRecord-style coupling allows save() calls from anywhere, requiring constant vigilance, Schema evolution: rename fields treated as drop+create, requires manual migration edits, Database models shouldn't be tightly coupled to API response types (password hash exposure), Validation can be skipped in dataclasses if inputs aren't trusted

Feature requests: Automatic rename detection in migrations instead of drop+create, Ability to generate read-only DTO types that prevent save()/delete() calls via type checking, Better support for modular monolith architecture with automatic DTO generation, Protocol-based approach to enforce separation between domain models and persistence layer

Competitors

Other products that read as similar to this one — 91 launches clear the similarity bar, closest 8 shown.

Attention rank: #5 of 92 (itself plus its competitors, highest first — normalized so YC and Product Hunt are compared fairly).

Launched 130 days after the earliest competitor.

Other launches for this product

Same idea, different domain

Nobody's really built a dev tools tool for Sales yet.