django-ninja-extra
Django Ninja Extra - Class Based Utility and more for Django Ninja(Fast Django REST framework)
What it is and what it does
Django Ninja Extra is a class-based extension for Django Ninja that organizes REST API endpoints into controller classes rather than scattered function decorators. It adds controller-level and route-level permission systems, built-in dependency injection via the injector package, and a service layer pattern for business logic separation. The package inherits Django Ninja's Pydantic-based validation, async support, and automatic OpenAPI documentation while layering on organizational patterns for larger APIs.
You use it by decorating controller classes with @api_controller, defining handler methods with @http_get/@http_post/etc., and registering them with your NinjaExtraAPI instance. Dependencies are automatically resolved and injected into controller constructors. It supports custom permission classes at both controller and individual route levels, making it suitable for APIs with complex authorization requirements. The package maintains compatibility with Django versions 3.1 through 6.0 and Python 3.8 and later.
Use it for:
- Build modular REST APIs by grouping related endpoints into controller classes with shared dependencies and permissions.
- Implement fine-grained permission control at both controller and individual route levels for complex authorization schemes.
- Inject services and repositories into controllers for clean separation between API handlers and business logic.
- Migrate from Django Ninja to a framework with familiar class-based patterns while retaining async-first performance.
- Generate interactive API documentation automatically via OpenAPI/Swagger without manual schema definitions.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Django Ninja Extra extends Django Ninja with class-based controllers, advanced permissions, and dependency injection for building structured REST APIs.
Yes. This is an actively maintained, permissive-licensed extension to Django Ninja with low install friction and no known vulnerabilities. Install it if you're building a Django REST API and prefer class-based organization with dependency injection; skip it if you're committed to function-based simplicity.
Install
django-ninja-extra on PyPI
pip
pip install django-ninja-extrauv
uv add django-ninja-extrapoetry
poetry add django-ninja-extraInstalling django-ninja-extra
Before you install
Low friction: pure Python wheel with five runtime dependencies (Django, django-ninja, injector, asgiref, contextlib2). Actively maintained with a release 24 days ago and 594 repository stars.
License in practice
MIT license (permissive) means you can use this freely in commercial and private projects with minimal restrictions.
Quickstart
pip install django-ninja-extra
# In settings.py
INSTALLED_APPS = [..., 'django_ninja_extra']
# In api.py
from django_ninja_extra import NinjaExtraAPI, api_controller, http_get
api = NinjaExtraAPI()
@api_controller('/math')
class MathController:
@http_get('/add')
def add(self, a: int, b: int):
return {"result": a + b}
api.register_controllers(MathController)
Verify before relying
- Whether the injector dependency works seamlessly with all Django versions listed (3.1 through 6.0) in practice.
- Performance characteristics compared to Django alone when handling high request volumes.
- Exact module import paths and whether 'ninja_extra' or 'django_ninja_extra' is the canonical import name.
Package facts
| License | not declared (permissive) |
| Python support | supports the current Python release (>=3.7) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 5 — Django, django-ninja, injector, asgiref, contextlib2 |
| Maintenance | actively maintained — 24 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 408,881/month — #6,874 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: django_ninja_extra-0.31.6-py3-none-any.whl
Tags
More Software Development packages
Provides backported and experimental type hints…
permissive · top 100 on PyPI
numpyNumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
fastapiFastAPI is a Python web framework for building…
permissive · top 100 on PyPI
annotated-docProvides a way to document function parameters,…
permissive · top 100 on PyPI
typerTyper builds command-line applications from…
permissive · top 1,000 on PyPI
distlibDistlib provides low-level packaging utilities…
permissive · top 1,000 on PyPI
django-ninjaDjango Ninja builds type-hint-based REST APIs…
permissive · top 5,000 on PyPI
django-ninja-jwtProvides JWT authentication for Django-Ninja…
permissive · top 15,000 on PyPI
django-service-objectsProvides a Service base class for Django that…
permissive · top 15,000 on PyPI
django-ratelimitProvides a Django decorator to rate-limit views…
permissive · top 5,000 on PyPI
django-bracesProvides reusable mixin classes for Django…
permissive · top 15,000 on PyPI
django-decorator-includeApplies decorators to Django URL patterns…
permissive · top 15,000 on PyPI
django-admin-extra-buttonsAdds custom buttons, links, and views to Django…
permissive · top 15,000 on PyPI
Flask-InjectorIntegrates dependency injection into Flask…
permissive · top 15,000 on PyPI
django-adminplusAdds custom admin views to Django's admin…
permissive · top 5,000 on PyPI