Oxyde ORM is a type-safe, Pydantic-centric asynchronous ORM with a high-performance Rust core designed for clarity, speed, and reliability.
Inspired by the elegance of Django’s ORM, Oxyde focuses on explicitness over magic, providing a modern developer-friendly workflow with predictable behavior and strong typing throughout.
Heads up!
Oxyde is a young project under active development. The API may evolve between minor versions. Feedback, bug reports, and ideas are very welcome. Feel free to open an issue!
Model.objects.filter() syntaxasynciotransaction.atomic() context manager with savepointsmakemigrations and migrate CLIOxyde's Rust core handles SQL generation and query execution, releasing Python's GIL during database I/O. This enables true parallelism for database operations.
Benchmarks vs popular Python ORMs (avg ops/sec, higher is better):
| Database | Oxyde | Tortoise | Piccolo | Django | SQLAlchemy | SQLModel | Peewee |
|---|---|---|---|---|---|---|---|
| PostgreSQL | 1,475 | 888 | 932 | 736 | 445 | 431 | 80 |
| MySQL | 1,239 | 794 | — | 714 | 536 | 505 | 461 |
| SQLite | 2,525 | 1,882 | 469 | 1,294 | 588 | 567 | 548 |
Built on Pydantic v2, Oxyde provides full type checking for models and queries. Your IDE understands your database schema.
Familiar API¶If you know Django ORM, you know Oxyde. The QuerySet API follows Django conventions:
# Django
User.objects.filter(age__gte=18).exclude(status="banned").order_by("-created_at")
# Oxyde (identical)
await User.objects.filter(age__gte=18).exclude(status="banned").order_by("-created_at").all()
No sync wrappers or thread pools. Oxyde is async from the ground up:
from oxyde.db import transaction
async with transaction.atomic():
user = await User.objects.create(name="Alice")
await Profile.objects.create(user_id=user.id)
| Database | Min Version | Status | Notes |
|---|---|---|---|
| PostgreSQL | 12+ | Full | RETURNING, UPSERT, FOR UPDATE/SHARE, JSON, Arrays |
| SQLite | 3.35+ | Full | RETURNING, UPSERT, WAL mode by default |
| MySQL | 8.0+ | Full | UPSERT via ON DUPLICATE KEY, FOR UPDATE/SHARE |
Ecosystem¶ Oxyde Admin¶SQLite < 3.35: Falls back to
last_insert_rowid()which may return incorrect IDs with concurrent inserts.MySQL: No RETURNING clause — uses
last_insert_id(). Bulk INSERT returns calculated ID range which may be incorrect with concurrent inserts.
Auto-generated admin panel for Oxyde ORM with zero boilerplate.
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | oxyde: Type-Safe, Pydantic-Centric Async ORM | 0 | 50 | 20-02-2026 |
| 2 | django-tasks-db - An ORM-based backend for Django Tasks | 0 | 35 | 21-02-2026 |
| 3 | django-modern-rest: REST With Types and Async Support | 0 | 24.29 | 23-04-2026 |
| 4 | onlymaps: A Python Micro-ORM | 0 | 35 | 10-01-2026 |
| 5 | django-orm-lens: Django Schema Review | 0 | 35 | 10-08-2026 |
| 6 | djangofmt - A fast, HTML aware, Django template formatter, written in Rust | 0 | 10 | 21-02-2026 |
| 7 | rsloop: An Event Loop for Asyncio Written in Rust | 0 | 10 | 20-04-2026 |
| 8 | django-query-doctor: Diagnose Slow Django Queries | 0 | 30 | 02-08-2026 |
| 9 | svc-infra: Bundled FastAPI Infrastructure | 0 | 35 | 02-01-2026 |
| 10 | django-bolt - Rust-powered API Framework for Django | 0 | 32.22 | 17-02-2026 |