Changelog¶
0.16.3 - 2026-05-02¶
Bugfix:
Fix migration detection for custom
APP_NAMEsetting
0.16.2 - 2026-05-02¶
Bugfix:
Fix migrations for custom
APP_NAMEsetting
0.16.1 - 2026-05-01¶
Features:
Add special
APP_NAMEsetting to support packaging nanodjango scripts
Docs:
Add
APP_NAMEsetting docs, making it clear it’s for advanced users onlyCreate new howto section
Add howto package a nanodjango script
0.16.0 - 2026-03-22¶
Features:
Add nanodjango.dev playground integration -
nanodjango share,nanodjango pullandnanodjango playcommands.
Docs:
Add section for the [nanodjango playground](https://nanodjango.dev/play/)
0.15.2 - 2026-03-18¶
Internal:
Added
is_prodargument toDjango.wsgi()for consistency withDjango.asgi()
0.15.1 - 2026-02-26¶
Features:
Add
Django.SQLITE_TMPfor temporary file-based sqlite database
Bugfix:
Django.SQLITE_MEMORYnow works with asyncservenow correctly uses specified port
Docs:
Add warnings about in-memory database limitations, and recommend temporary file database for most use cases
0.15.0 - 2026-02-22¶
Features:
Django.create_servernow makes and applies migrations in--no-inputmode, and creates a super user using the logic from #94Django.create_serversupports binding to different hostsAdd constant
Django.SQLITE_MEMORYto avoid magic string for in-memory sqlite db
Breaking changes:
Django.create_serverarguments are now standardised to matchrunandserveDjango.create_serverdefault behaviour has changed (see Features)Django.create_serverdrops theportargument, and now takes a singlehostargument to specify the host and port in the format"host:port"(default:"0.0.0.0:8000")Django.create_servernow takes an optionalusernameandpasswordfor the non-interactivecreatesuperuser.
Bugfix:
Fix support for
:memory:sqlite database name
0.14.0 - 2026-02-16¶
Features:
Add settings callback support (#74, #77, #90)
Automatic superuser creation and command line arguments (experimental, see #94)
Bugfix:
Make runserver Windows-compatible (#45, #91)
Thanks to:
D Chukhin (dchukhin) for early work on settings callbacks (#77)
Chris Beaven (SmileyChris) for windows fix (#91), settings callbacks (#90)
0.13.0 - 2026-01-18¶
Features:
Add
app.create_server()to run nanodjango as an async task (#68, #78), andexamples/hello_async_server.pyto demonstrate it.
Bugfix:
Fix
HttpResponseBasesubclass support instring_viewwrapper (#87)
Docs:
Replaced theme
Swapped to build using dirhtml for nicer urls
Fixed uwsgi instructions (#58)
Added internal API docs
Added API howto (#70, #83)
Thanks to:
Emmanuelle Delescolle (nanuxbe) for uwsgi fix (#58)
Bryan Ponce (bponce02) for
app.create_server()(#68, #78)Sadegh (Old6Man6) for API example and howto (#70, #83)
Chris Beaven (SmileyChris) for
string_viewfix (#87)
0.12.2 - 2025-09-11¶
Bugfix:
Fixed module resolution error blocking scripts from running directly
Internal:
Rename legacy
DF_*settings toND_*(#55)
Thanks to:
Bryan Ponce (bponce02) for
DF*fix (#55)
0.12.1 - 2025-09-01¶
Bugfix:
Fix convert AST unparsing errors by adding missing location information
Extend convert import detection to recursively search within nested blocks
Extend convert reference tracking for blocks (context manager, exception handlers) and tuple unpacking
Add convert urlpatterns regex matching to support type hints in convert templates
Fix convert decorator filtering to handle all route decorator types
0.12.0 - 2025-08-24¶
Features:
Django requirement now 5.2
Add template tags support
Add
convert_build_app_templatetagsandconvert_build_app_templatetags_donehooksAdd
django_browser_reloadcontrib plugin to support automatic browser reloadingAdd
--templateoption toconvertcommand for custom Django project templates (#42)
Docs:
Add “Integrations” section to track growing list of key packages which either have
nanodjango.contribplugins or provide plugins themselves.
Bugfix:
Fix arguments not being passed through in manage command (#61, #66)
Fix issue with multiple deferred imports in a single statement
Fix WSGI/ASGI preparation to avoid double initialization
Fix missing
urlsargument in hookImprove patch migrations to work around missing migration dir in some environments
0.11.2 - 2025-07-06¶
Bugfix:
Fix defer issues by switching to using bytecode to detect import statements
0.11.1 - 2025-07-01¶
Bugfix:
Correct spelling of app.re_path
0.11.0 - 2025-06-30¶
Features:
Added support for deferred imports
Added new plugin system using pluggy
Added contrib plugin for django-distill for support in
Django.route().Added django-nanopages and django-distill as optional dependencies under
[static]Install all optional dependencies with
[full]Refactored test tools into
nanodjango.tests.utilsfor third party testsAdded
Django.path()andDjango.re_path()convenience methods
Breaking changes:
The
convertplugin system has been replaced with the pluggy-based plugin system - see Upgrading convert plugins belowThe
--pluginoption has moved fromnanodjango convert --plugin=...tonanodjango --plugin=... <command>Plugins are no longer registered on import - plugins now need to be added via setup hook, explicitly listed on the command line with
--plugin, or manually registered usingapp.pm.hook.register(...).
Bugs:
Fix admin site URL priority so it is still served with a catch-all route.
Upgrading convert plugins¶
Existing converter plugins will need to be converted to work with pluggy.
Code within plugin hooks should work as before, but they will need to be restructured.
remove imports from
nanodjango.convert.plugins- that no longer existsadd
from nanodjango import hookimplremove the
ConverterPluginclasses and move the methods to functionsadd the
@hookimpldecorator to the plugin functionsadd a
convert_prefix to the function namesYou should use side effects to update args in place, like the resolver and extra_src
For example, if your plugin was:
from ..convert.plugin import ConverterPlugin
class MyConverter(ConverterPlugin):
def build_app_api(
self, converter: Converter, resolver: Resolver, extra_src: list[str]
) -> tuple[Resolver, list[str]]:
# do something
return resolver, extra_src
it should now be:
from nanodjango import hookimpl
@hookimpl
def convert_build_app_api(
converter: Converter, resolver: Resolver, extra_src: list[str]
):
# update resolver and extra_src in place
0.10.0 - 2025-02-13¶
Features:
Support templates in the single file (#44)
Bugs:
Add missing license file (#49)
Fix view decorators when used with
@app.route(#50)Fix incorrect convert command in readme (#53)
Fix missing arguments in
string_view(#54)
Thanks to:
lybtt for the readme fix (#53)
0.9.2 - 2024-10-14¶
Bugs:
Fix kwarg handling in string_view decorator (#31)
Docs:
Fix incorrect tutorial syntax (#32, #33)
Thanks to:
최병욱 (esc5221) for providing the kwarg handling fix (#31)
Abdulwasiu Apalowo (mrbazzan) for providing doc fix (#32, #33)
0.9.1 - 2024-09-27¶
Bugs:
Fix instance name detection (#21, #22)
Fix dev mode ASGI (#23)
Docs:
Fix incorrect doc reference (#16)
Fix incorrect tutorial syntax (#15, #16)
Fix incorrect convert command invocation (#25)
Fix incorrect troubleshooting syntax (#26)
Thanks to:
Simon Willison (simonw) for providing doc fixes (#15, #16)
vincent d warmerdam (koaning) for providing doc fixes (#26)
0.9.0 - 2024-09-21¶
Features:
nanodjango servecommand for production deploymentsStatic files are now served using
whitenoiseServe static files in the site root from
PUBLIC_DIRdir (defaultpublic)
Breaking changes:
nanodjango runis nownanodjango manage, mirroringmanage.py.nanodjango manageno longer callsrunserverby default.nanodjango startis nownanodjango run, differentiating it fromserve.Django.run()is nowDjango.manage()Django.start()is nowDjango.run()
0.8.1 - 2024-09-07¶
Changes:
Add async API detection for async endpoints registered with
@app.api
0.8.0 - 2024-09-07¶
Feature:
Async support
Changes:
Add
uvicornas a dependency for ease of use
Bugfix:
Fix issue where scripts without models could fail on
migrateFix issue where the app may not fully initialise when run as WSGI
0.7.1 - 2024-06-25¶
Feature:
Serve static and media by default (#9)
Support
nameargument in@app.route(#11)
0.7.0 - 2024-06-19¶
Feature:
Embed support for django-ninja through the
@app.apidecorator. (#7)
Changes:
New
build_app_apiandbuild_app_api_doneplugin hooks
0.6.1 - 2024-06-14¶
Bugfix:
Fix remaining hard-coded references to
appin user source, updatescale.pyto usedjangoinstead ofappto test. (#8)
0.6.0 - 2024-05-17¶
Feature:
Add
startcommand to create and initialise the database
Thanks to:
Chris Beaven (SmileyChris) for suggesting a lower effort start (#4)
Lincoln Loop for supporting this release
0.5.0 - 2024-05-14¶
Feature:
Support regular expression paths and path includes
Add plugin system to the converter for third-party extensions
Add django-ninja converter plugin for
NinjaAPIand exampleAdd docs for writing converter plugins
Changes:
Command line argument order has changed from
<script> <cmd>to<cmd> <script>Script can now be specified as a module, eg
fooinstead offoo.pyDjango instance no longer needs to be
app- its name can be specified as<script>:<name>(egcounter:myapporcounter.py:myapp), or can be auto-detected.ADMIN_URLis now optional - the admin site will be enabled if there are any admin decorators present
Internal:
Remove redundant cleaning of leading slash in paths
Improved gitignore
Thanks to:
Eric Matthes (ehmatthes) for removing the redundant cleaning of the leading slash, improving the gitignore (#2), and rewriting the contributor docs (#3)
Chris Beaven (SmileyChris) for suggesting the command line changes (#5)
0.4.0 - 2024-04-21¶
Feature:
Add support for CBVs
Add support for running management commands from within a script
WSGI mode now runs with
DEBUG=Falseby defaultDocument usage with
pipx run
Bugfix
Fix template path
0.3.0 - 2024-04-14¶
Feature:
Add
convertcommand to turn a single file app into a full Django projectAdd settings
EXTRA_APPS,SQLITE_DATABASEandMIGRATIONS_DIRAdd WSGI support
Rename project from
django-flasky
0.2.0 - 2024-04-01¶
Feature:
Admin support
Add setting
ADMIN_URL
0.1.3 - 2023-10-19¶
Fix:
Python compatibility issue in run command
0.1.2 - 2022-11-25¶
Docs:
Correct examples
0.1.1 - 2022-11-25¶
Docs:
Correct packaging metadata
0.1.0 - 2022-11-25¶
Initial release as django-flasky