{"title":"Reporting bugs and requesting features","version":"dev","locale":"en","docname":"internals/contributing/bugs-and-features","url":"/en/dev/internals/contributing/bugs-and-features/","canonical":"https://djangodocs.dev/en/dev/internals/contributing/bugs-and-features/","summary":"Important Please report security issues only to security@djangoproject.com . This is a private list only open to long-time, highly trusted Django developers, and…","html":"<h1>Reporting bugs and requesting features<a class=\"heading-anchor\" href=\"#reporting-bugs-and-requesting-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-important\">\n<p class=\"admonition-title\">Important</p>\n<p>Please report security issues <strong>only</strong> to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">security&#64;djangoproject.com</span></code>. This is a private list only open to\nlong-time, highly trusted Django developers, and its archives are\nnot public. For further details, please see <a class=\"reference internal\" href=\"/en/dev/internals/security/\"><span class=\"doc\">our security\npolicies</span></a>.</p>\n</aside>\n<section id=\"reporting-bugs\">\n<span id=\"id1\"></span><h2>Reporting bugs<a class=\"heading-anchor\" href=\"#reporting-bugs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Before reporting a bug on the <a class=\"reference external\" href=\"https://code.djangoproject.com/\">ticket tracker</a> consider these points:</p>\n<ul class=\"simple\">\n<li><p>Check that someone hasn’t already filed the bug report by <a class=\"reference external\" href=\"https://code.djangoproject.com/search\">searching</a> or\nrunning <a class=\"reference external\" href=\"https://code.djangoproject.com/query\">custom queries</a> in the ticket tracker.</p></li>\n<li><p>Don’t use the ticket system to ask support questions. Use the <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a>\nor the <a class=\"reference external\" href=\"https://chat.djangoproject.com\">Django Discord server</a> for that.</p></li>\n<li><p>Don’t reopen issues that have been marked “wontfix” without finding consensus\nto do so on the <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a>.</p></li>\n<li><p>Don’t reopen issues that have been marked “needsnewfeatureprocess” without\nshepherding an issue through the <a class=\"reference external\" href=\"https://github.com/orgs/django/projects/24/\">new feature ideas</a> GitHub project.</p></li>\n<li><p>Don’t use the ticket tracker for lengthy discussions, because they’re\nlikely to get lost. If a particular ticket is controversial, please move the\ndiscussion to the <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a>.</p></li>\n</ul>\n<p>Well-written bug reports are <em>incredibly</em> helpful. However, there’s a certain\namount of overhead involved in working with any bug tracking system so your\nhelp in keeping our ticket tracker as useful as possible is appreciated. In\nparticular:</p>\n<ul class=\"simple\">\n<li><p><strong>Do</strong> read the <a class=\"reference internal\" href=\"/en/dev/faq/\"><span class=\"doc\">FAQ</span></a> to see if your issue might\nbe a well-known question.</p></li>\n<li><p><strong>Do</strong> ask on <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a> or the <a class=\"reference external\" href=\"https://chat.djangoproject.com\">Django Discord server</a> <em>first</em> if\nyou’re not sure if what you’re seeing is a bug.</p></li>\n<li><p><strong>Do</strong> write complete, reproducible, specific bug reports. You must\ninclude a clear, concise description of the problem, and a set of\ninstructions for replicating it. Add as much debug information as you can:\ncode snippets, test cases, exception backtraces, screenshots, etc. A nice\nsmall test case is the best way to report a bug, as it gives us a\nhelpful way to confirm the bug quickly.</p></li>\n<li><p><strong>Don’t</strong> post to <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a> only to announce that you have filed a\nbug report. All the tickets are mailed to another list, <a class=\"reference internal\" href=\"/en/dev/internals/mailing-lists/#django-updates-mailing-list\"><span class=\"std std-ref\">django-updates</span></a>,\nwhich is tracked by developers and interested community members; we see them\nas they are filed.</p></li>\n</ul>\n<p>To understand the lifecycle of your ticket once you have created it, refer to\n<a class=\"reference internal\" href=\"/en/dev/internals/contributing/triaging-tickets/#triage-workflow\"><span class=\"std std-ref\">Triage workflow</span></a>.</p>\n<section id=\"reporting-user-interface-bugs\">\n<h3>Reporting user interface bugs<a class=\"heading-anchor\" href=\"#reporting-user-interface-bugs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If your bug impacts anything visual in nature, there are a few additional\nguidelines to follow:</p>\n<ul class=\"simple\">\n<li><p>Include screenshots in your ticket which are the visual equivalent of a\nminimal test case. Show off the issue, not the crazy customizations\nyou’ve made to your browser.</p></li>\n<li><p>If the issue is difficult to show off using a still image, consider\ncapturing a <em>brief</em> screencast. If your software permits it, capture only\nthe relevant area of the screen.</p></li>\n<li><p>If you’re offering a patch that changes the look or behavior of Django’s\nUI, you <strong>must</strong> attach before <em>and</em> after screenshots/screencasts.\nTickets lacking these are difficult for triagers to assess quickly.</p></li>\n<li><p>Screenshots don’t absolve you of other good reporting practices. Make sure\nto include URLs, code snippets, and step-by-step instructions on how to\nreproduce the behavior visible in the screenshots.</p></li>\n<li><p>Make sure to set the UI/UX flag on the ticket so interested parties can\nfind your ticket.</p></li>\n<li><p>If the issue relates to accessibility, please link to the relevant\n<a class=\"reference internal\" href=\"/en/dev/internals/contributing/accessibility/#accessibility-standards\"><span class=\"std std-ref\">accessibility standard</span></a> if applicable.</p></li>\n</ul>\n</section>\n</section>\n<section id=\"requesting-features\">\n<span id=\"id2\"></span><h2>Requesting features<a class=\"heading-anchor\" href=\"#requesting-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>We’re always trying to make Django better, and your feature requests are a key\npart of that. Here are some tips on how to make a request most effectively:</p>\n<ul class=\"simple\">\n<li><p>Evaluate whether the feature idea requires changes in Django’s core. If your\nidea can be developed as an independent application or module — for\ninstance, you want to support another database engine — we’ll probably\nsuggest that you develop it independently. Then, if your project gathers\nsufficient community support, we may consider it for inclusion in Django.</p></li>\n<li><p>Propose the feature in the <a class=\"reference external\" href=\"https://github.com/orgs/django/projects/24/\">new feature ideas</a> GitHub project (not in the\nticket tracker) by creating a new item in the <strong>Idea</strong> column. This is where\nthe community and the <a class=\"reference internal\" href=\"/en/dev/internals/organization/#steering-council\"><span class=\"std std-ref\">Steering Council</span></a> evaluate new\nideas for the Django ecosystem. This step is especially important for large\nor complex proposals. We prefer to discuss any significant changes to\nDjango’s core before any development begins. In some cases, a feature may be\nbetter suited as a third-party package, where it can evolve independently of\nDjango’s release cycle.</p></li>\n<li><p>Describe clearly and concisely what the missing feature is and how you’d\nlike to see it implemented. Include example code (non-functional is OK)\nif possible.</p></li>\n<li><p>Explain <em>why</em> you’d like the feature. Explaining a minimal use case will help\nothers understand where it fits in, and if there are already other ways of\nachieving the same thing.</p></li>\n</ul>\n<p>See also: <a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-documentation/#documenting-new-features\"><span class=\"std std-ref\">Documenting new features</span></a>.</p>\n</section>\n<section id=\"requesting-performance-optimizations\">\n<h2>Requesting performance optimizations<a class=\"heading-anchor\" href=\"#requesting-performance-optimizations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Reports of a performance regression, or suggested performance optimizations,\nshould provide benchmarks and commands for the ticket triager to reproduce.</p>\n<p>See the <a class=\"reference internal\" href=\"/en/dev/internals/contributing/writing-code/submitting-patches/#django-asv-benchmarks\"><span class=\"std std-ref\">django-asv benchmarks</span></a> for more details of Django’s existing\nbenchmarks.</p>\n</section>\n<section id=\"how-we-make-decisions\">\n<span id=\"id3\"></span><h2>How we make decisions<a class=\"heading-anchor\" href=\"#how-we-make-decisions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Whenever possible, we aim for rough consensus. Emoji reactions are used on\nissues within the <a class=\"reference external\" href=\"https://github.com/orgs/django/projects/24/\">new feature ideas</a> GitHub project to track community\nfeedback. The following meanings are assigned to each reaction:</p>\n<ul class=\"simple\">\n<li><p>👍: I support this feature and would use it</p></li>\n<li><p>👎: I oppose this feature or believe it would cause issues for me or Django</p></li>\n<li><p>😕: I have no strong opinion on this feature</p></li>\n<li><p>🎉: This feature seems like a straightforward and beneficial addition</p></li>\n</ul>\n<p>The <a class=\"reference internal\" href=\"/en/dev/internals/organization/#steering-council\"><span class=\"std std-ref\">Steering Council</span></a> will regularly review the ideas\nin the project, moving those with community support through the following\nstages:</p>\n<ul class=\"simple\">\n<li><p>Idea</p></li>\n<li><p>Approved - Idea refinement - Team creation</p></li>\n<li><p>In progress</p></li>\n<li><p>Working solution - Review - Feedback</p></li>\n<li><p>Needs maintainer (Django only)</p></li>\n<li><p>Done</p></li>\n</ul>\n<p>Occasionally, discussions on feature ideas or the direction of Django may take\nplace on the Django Forum. These discussions may include informal votes, which\nfollow the voting style invented by Apache and used on Python itself, where\nvotes are given as +1, +0, -0, or -1.\nRoughly translated, these votes mean:</p>\n<ul class=\"simple\">\n<li><p>+1: “I love the idea and I’m strongly committed to it.”</p></li>\n<li><p>+0: “Sounds OK to me.”</p></li>\n<li><p>-0: “I’m not thrilled, but I won’t stand in the way.”</p></li>\n<li><p>-1: “I strongly disagree and would be very unhappy to see the idea turn\ninto reality.”</p></li>\n</ul>\n<p>Although these votes are informal, they’ll be taken very seriously. After a\nsuitable voting period, if an obvious consensus arises we’ll follow the votes.</p>\n</section>\n<section id=\"how-to-test-pre-release-versions-of-django\">\n<span id=\"testing-pre-releases\"></span><h2>How to test pre-release versions of Django<a class=\"heading-anchor\" href=\"#how-to-test-pre-release-versions-of-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Testing pre-releases is a great way to contribute to Django. Early testers\nhelp catch bugs before the final release, ensuring a smoother upgrade\nexperience for everyone.</p>\n<section id=\"prerequisites\">\n<h3>Prerequisites<a class=\"heading-anchor\" href=\"#prerequisites\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Before testing a pre-release, it is important that your project is running\nsmoothly on the latest stable release of Django. That way, any regressions can\nbe attributed to the pre-release. See the <a class=\"reference internal\" href=\"/en/dev/howto/upgrade-version/\"><span class=\"doc\">How to upgrade Django to a newer version</span></a> guide\nfor instructions on getting up to date.</p>\n<p>To ensure your project is ready, you should also:</p>\n<ul>\n<li><p><strong>Read the release notes:</strong> Review the <a class=\"reference internal\" href=\"/en/dev/releases/\"><span class=\"doc\">Release notes</span></a> for the\nupcoming version to learn about upgrade paths for deprecated features or\nabout minor backward-incompatible changes.</p></li>\n<li><p><strong>Resolve deprecation warnings:</strong> Run your tests with deprecation warnings\nenabled to become aware of required follow-up actions:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-Wa<span class=\"w\"> </span>manage.py<span class=\"w\"> </span><span class=\"nb\">test</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"testing-your-project\">\n<h3>Testing your project<a class=\"heading-anchor\" href=\"#testing-your-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>You can install the latest pre-release using <code class=\"docutils literal notranslate\"><span class=\"pre\">pip</span></code>:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>--pre<span class=\"w\"> </span>Django\n</code></pre></div>\n<p>Once installed, run your project’s test suite. Rather than just checking\nif tests pass, try the following:</p>\n<ul class=\"simple\">\n<li><p><strong>Check dependency support:</strong> Determine whether major dependencies support\nthe new version by checking Django version classifiers on PyPI.\nSince those projects also value early bug reports, don’t let a lack\nof support prevent you from testing.</p></li>\n<li><p><strong>Monitor performance:</strong> You can run your tests with the <a class=\"reference internal\" href=\"/en/dev/ref/django-admin/#cmdoption-test-durations\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">test</span>\n<span class=\"pre\">--durations</span></code></a> flag to identify potential performance regressions.</p></li>\n<li><p><strong>Automate tests in CI:</strong> Consider running your Continuous Integration (CI)\npipeline with the pre-release version.</p></li>\n<li><p><strong>Test manually:</strong> While automated tests are great, manually testing your\napplication’s main workflows is an important part of verifying compatibility\nwith a new release.</p></li>\n</ul>\n</section>\n<section id=\"reporting-issues\">\n<h3>Reporting issues<a class=\"heading-anchor\" href=\"#reporting-issues\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you discover a bug, please report it via the <a class=\"reference external\" href=\"https://code.djangoproject.com/\">Django issue tracker</a> so it can be fixed before the final\nrelease. When creating the ticket, be sure to set the Django version field to\nthe exact pre-release version you are testing.</p>\n<p>If you suspect a regression, it’s helpful to report the specific commit that\ncaused it. See <a class=\"reference internal\" href=\"/en/dev/internals/contributing/triaging-tickets/#bisecting-a-regression\"><span class=\"std std-ref\">Bisecting a regression</span></a> for instructions.</p>\n<p>You can also discuss any issues or share feedback in the <a class=\"reference external\" href=\"https://forum.djangoproject.com/c/announcements/prereleases/32\">Pre-releases</a> category\non the <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a>.</p>\n</section>\n</section>","rootId":"reporting-bugs-and-requesting-features","toc":[{"title":"Reporting bugs","anchor":"reporting-bugs","children":[{"title":"Reporting user interface bugs","anchor":"reporting-user-interface-bugs","children":[]}]},{"title":"Requesting features","anchor":"requesting-features","children":[]},{"title":"Requesting performance optimizations","anchor":"requesting-performance-optimizations","children":[]},{"title":"How we make decisions","anchor":"how-we-make-decisions","children":[]},{"title":"How to test pre-release versions of Django","anchor":"how-to-test-pre-release-versions-of-django","children":[{"title":"Prerequisites","anchor":"prerequisites","children":[]},{"title":"Testing your project","anchor":"testing-your-project","children":[]},{"title":"Reporting issues","anchor":"reporting-issues","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Django internals","url":"/en/dev/internals/"},{"docname":"internals/contributing/index","title":"Contributing to Django","url":"/en/dev/internals/contributing/"}],"prev":{"docname":"internals/contributing/localizing","title":"Localizing Django","url":"/en/dev/internals/contributing/localizing/"},"next":{"docname":"internals/contributing/triaging-tickets","title":"Triaging tickets","url":"/en/dev/internals/contributing/triaging-tickets/"},"formats":{"html":"/en/dev/internals/contributing/bugs-and-features/","markdown":"/en/dev/internals/contributing/bugs-and-features.md","json":"/en/dev/internals/contributing/bugs-and-features.json"},"source":"https://github.com/django/django/blob/main/docs/internals/contributing/bugs-and-features.txt","official":"https://docs.djangoproject.com/en/dev/internals/contributing/bugs-and-features/","inVersions":["dev","6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9","1.8"],"inLocales":["en"]}