wemake-services/django-modern-rest
wemake-services/django-modern-rest has 1,543 GitHub stars and 238 forks. GitHot measured +9 stars in 24 hours and +20 in 7 days. Last checked 2026-11-10 03:18 UTC. Last push 2026-11-02.
Modern REST framework for Django with types and async support!
What you can do
- Supports async Django without any sync_to_async / async_to_sync calls inside, tested to work with free-threading builds
- Supports pydantic2, msgspec, attrs, dataclasses, TypedDict as model schemas, but not bound to any of these libraries
- Fully typed and checked with mypy, pyright, ty, and pyrefly in strict modes
- Supports content negotiation, has default implementations for json, msgpack, SSE, Json Lines, and more
Measured star growth
- in 24h
- +9
- in 7 days
- +20
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalModern REST framework for Django with types and async support!
Features
- Blazingly fast
- Supports async Django without any
sync_to_async/async_to_synccalls inside, tested to work with free-threading builds - Supports
pydantic2,msgspec,attrs,dataclasses,TypedDictas model schemas, but not bound to any of these libraries - Fully typed and checked with
mypy,pyright,ty, andpyreflyin strict modes - Supports content negotiation, has default implementations for
json,msgpack, SSE, Json Lines, and more - Strict schema validation of both requests and responses, including errors
- Supports OpenAPI 3.1 / 3.2 semantic schema generation out of the box
- Supports all your existing
djangoprimitives and packages, no custom runtimes - Great testing tools with schemathesis, polyfactory, tracecov, bundled
pytestplugin, and default Django's testing primitives - 100% test coverage with 4000+ of carefully designed unit, integration, typing, and property-based tests on different databases and caches
- High security standards
- Built by the community for the community, not a single-person project
- Great docs
- No AI slop, but built for the LLM era
- No emojis 🌚️️
Testimonials
The one thing I really love about
django-modern-restis its pluggable serializers and validators. Frameworks that are tightly coupled withpydanticcan be really painful to work with.
— Kirill Podoprigora, CPython core developer
Using
django-modern-resthas been a game-changer for my productivity. The strict type safety and schema validation for both requests and responses mean I spend less time debugging and more time building.
— Josiah Kaviani, Django core developer
I rarely see frameworks that treat their OpenAPI schema as a first-class citizen.
django-modern-restnot only generates a schema that accurately reflects your code, but also gives you the tools to verify it.
— Dmitry Dygalo, author of Schemathesis
django-modern-restis a fantastic showcase of modern Python typing. When I need inspiration for typing in Python, I often refer to its codebase.
— Sergey Miryanov, CPython core developer
Installation
Works for:
- CPython 3.11+ or PyPy 3.11+
- Django 5.0, 5.1, 5.2, 6.0, 6.1
pip install django-modern-rest
There are several included extras:
'django-modern-rest[msgspec]'providesmsgspecsupport and the fastest json parsing, recommended to be always included'django-modern-rest[pydantic]'providespydanticsupport'django-modern-rest[attrs]'providesattrssupport'django-modern-rest[jwt]'providespyjwtauth support'django-modern-rest[openapi]'providesOpenAPIschema validation,yamlOpenAPI view, and generates better OpenAPI examples withpolyfactory
Example
The shortest example (click here to copy the whole file):
>>> import uuid
>>> import pydantic
>>> from dmr import Body, Controller, Headers
>>> # Or use `dmr.plugins.msgspec` or write your own!
>>> from dmr.plugins.pydantic import PydanticFastSerializer
>>> class UserCreateModel(pydantic.BaseModel):
... email: str
>>> class UserModel(UserCreateModel):
... uid: uuid.UUID
... consumer: str
>>> class HeaderModel(pydantic.BaseModel):
... consumer: str = pydantic.Field(alias='X-API-Consumer')
>>> class UserController(Controller[PydanticFastSerializer]):
... async def post( # <- can be sync as well!
... self,
... parsed_body: Body[UserCreateModel],
... parsed_headers: Headers[HeaderModel],
... ) -> UserModel:
... """All added props have the correct runtime and static types."""
... return UserModel(
... uid=uuid.uuid4(),
... email=parsed_body.email,
... consumer=parsed_headers.consumer,
... )
And then route this controller in your urls.py:
>>> from django.urls import path
>>> from dmr.routing import Router
>>> router = Router(
... 'api/',
... [
... path('user/', UserController.as_view(), name='users'),
... ],
... )
>>> urlpatterns = [
... router.to_urlpatterns(namespace='api'),
... ]
Done! Now you have your shiny API with 100% type safe validation and interactive docs.
Next steps:
- The full documentation has everything you need to get started!
- wemake-django-template can be used to jump-start your new project with
django-modern-rest! - awesome-django-modern-rest - a curated list of resources related to
django-modern-rest!
Contributors
License
Credits
This project was generated with wemake-python-package. Current template version is: e1fcf312d7f715323dcff0d376a40b7e3b47f9b7. See what is updated since then.
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,599 starspublic-apis/public-apis
A collective list of free APIs
497,924 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
449,790 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,297 stars