A typed, unified,
async-first toolkit
for Django 5+
Stop duplicating validation. Stop fighting the cache. Stop fearing migrations.
Django Nova brings Pydantic-powered typing, intelligent caching, and zero-downtime migrations to your Django projects.
uv add django-novaBuilt on Four Pillars
Django Nova is not just another Django package. It is a fundamental rethinking of how Django applications should be architected in the modern Python ecosystem.
Single Source of Truth
All business logic of validation is concentrated in Pydantic schemas. No more duplicating rules across forms, serializers, and models. Define it once, use it everywhere.
Fail Fast
Errors should be detected at the static analysis stage, not in runtime. Full pyright --strict compatibility with PEP 695 type derivability in your IDE.
Default Asynchrony
All operations are designed with asyncio in mind. From QuerySets to background tasks — everything leverages Python's async ecosystem without compromising the synchronous API.
Zero-Downtime
Migrations and updates should not interrupt system operation. Built-in PostgreSQL concurrent index creation and lock-free ALTER TABLE wrappers keep your app running 24/7.
"Django Nova bridges the gap between Django's batteries-included philosophy and the demands of modern, type-safe, high-performance Python development."— Artem Alimpiev, Creator
Six Core Modules
Each module solves a specific Django pain point. Use them independently or together for the full Nova experience.
nova.typing
Strict Type LayerNovaModel and NovaConfig with full PEP 695 support. Complete type derivability in PyCharm, VSCode + Pyright. Write models that your IDE truly understands.
nova.validation
Pydantic BridgeUnified validation between Django and Pydantic. Define rules once in a schema — they apply to forms, serializers, and model save() automatically.
nova.cache
Intelligent CachingSQL Compiler-based cache keys that survive Django updates. O(1) cache invalidation via reversible index on save() and delete(). No manual cache management needed.
nova.tasks
Async Task EngineBuilt on asyncio.Queue — an in-process alternative to Celery. Perfect for ML inference, simulations, and CPU-bound background work without external brokers.
nova.db
Safe MigrationsPostgreSQL concurrent index creation and lock-free ALTER TABLE wrappers. Split heavy data migrations into batches to prevent OOM. Deploy with confidence.
Modular Extras
Install What You NeedOptional extras for every use case: DRF, Redis, OpenTelemetry, FastAPI integration, async DB support. Keep your dependency tree lean.
See It in Action
From schema to model to view — everything is connected, typed, and validated automatically.
from django.db import models
from nova.typing import NovaModel, NovaConfig
from pydantic import BaseModel
class ArticleSchema(BaseModel):
title: str
content: str
views: int = 0
class Article(NovaModel):
_nova_config = NovaConfig(
pydantic_schema=ArticleSchema,
strict_validation=True,
cache_enabled=True,
)
title = models.CharField(max_length=200)
content = models.TextField()from django.http import JsonResponse
from .models import Article
async def create_article(request):
# Automatic Pydantic validation on save()
article = await Article.objects.acreate(
title="Hello Nova",
content="Typed Django!"
)
# Type-safe access — Pyright strict compatible
return JsonResponse({
"id": article.id,
"title": article.title, # str ✅
})from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
class ArticleSchema(BaseModel):
"""Single source of truth for Article validation."""
title: str = Field(..., min_length=1, max_length=200)
content: str = Field(..., min_length=10)
views: int = Field(default=0, ge=0)
published_at: Optional[datetime] = None
class Config:
str_strip_whitespace = True# settings.py
INSTALLED_APPS = [
# ...
"nova",
]
# Optional: Configure cache backend
NOVA_CACHE = {
"backend": "django.core.cache.backends.redis.RedisCache",
"location": "redis://127.0.0.1:6379/1",
"timeout": 300,
}
# Optional: Task queue settings
NOVA_TASKS = {
"max_workers": 4,
"queue_size": 1000,
}Installation
Get in Touch
Have questions, ideas, or want to contribute? Reach out through any of these channels.
Share Your Thoughts
Found a bug? Have a feature idea? Want to collaborate? Drop a message — I'd love to hear from you.
