Beta — Python 3.12+ · Django 5.0+

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-nova
or pip install django-nova

Built 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.

01

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.

02

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.

03

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.

04

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 Layer

NovaModel and NovaConfig with full PEP 695 support. Complete type derivability in PyCharm, VSCode + Pyright. Write models that your IDE truly understands.

PEP 695pyright --strictIDE Support
🛡️

nova.validation

Pydantic Bridge

Unified validation between Django and Pydantic. Define rules once in a schema — they apply to forms, serializers, and model save() automatically.

PydanticZero DuplicationAuto-validate

nova.cache

Intelligent Caching

SQL Compiler-based cache keys that survive Django updates. O(1) cache invalidation via reversible index on save() and delete(). No manual cache management needed.

QuerySet CacheO(1) InvalidationSQL Hash
🔄

nova.tasks

Async Task Engine

Built on asyncio.Queue — an in-process alternative to Celery. Perfect for ML inference, simulations, and CPU-bound background work without external brokers.

asyncio.QueueNo CeleryIn-Process
🗄️

nova.db

Safe Migrations

PostgreSQL concurrent index creation and lock-free ALTER TABLE wrappers. Split heavy data migrations into batches to prevent OOM. Deploy with confidence.

Zero-DowntimeCONCURRENTLYBatch Split
📦

Modular Extras

Install What You Need

Optional extras for every use case: DRF, Redis, OpenTelemetry, FastAPI integration, async DB support. Keep your dependency tree lean.

DRFRedisOTelFastAPI

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

Coreuv add django-nova
With DRFuv add django-nova[drf]
With Redisuv add django-nova[redis]
Full Stackuv add django-nova[tracing,observability]

Get in Touch

Have questions, ideas, or want to contribute? Reach out through any of these channels.

Artem Alimpiev

Artem Alimpiev

Creator & Maintainer

Python developer focused on building developer-friendly tools for the Django ecosystem. Passionate about type safety, async programming, and zero-downtime deployments.