├── .github ├── ISSUE_TEMPLATE │ ├── commercial_integration.yml │ ├── config.yml │ ├── feature.yml │ └── merge_third_party_package.yml ├── labels.yml └── workflows │ ├── new_issue_first_comment.yml │ └── setup_labels.yml ├── README.md └── setup └── start.md /.github/ISSUE_TEMPLATE/commercial_integration.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Integrate a commercial product 3 | description: Do you have a commercial product you'd like to see integrated with Django? 4 | labels: ['type / commercial', 'phase / new'] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | The most likely answer to this question is going to be no. However, if you're willing to fund development and maintenance for years, we are interested! 10 | 11 | For a baseline, the minimum financial investment you should be considering is $250,000 USD. 12 | 13 | If you haven't already, [please go search the existing issues for ideas similar to yours](https://github.com/django/new-features/issues?q=is%3Aissue). 14 | 15 | If English isn't your native language, let us know and do your best. If you'd like, you can answer in your native language and we'll use translation tools. 16 | 17 | - type: checkboxes 18 | id: terms 19 | attributes: 20 | label: Code of Conduct 21 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://www.djangoproject.com/conduct/) 22 | options: 23 | - label: I agree to follow Django's Code of Conduct 24 | required: true 25 | 26 | - type: input 27 | id: package-name 28 | attributes: 29 | label: Package Information 30 | description: Which product are you wanting to integrate with Django? 31 | validations: 32 | required: true 33 | 34 | - type: textarea 35 | id: problem 36 | attributes: 37 | label: Problem 38 | description: What problem(s) does this solve? Please explain the problem or problems this feature would address. 39 | validations: 40 | required: true 41 | 42 | - type: textarea 43 | id: rationale 44 | attributes: 45 | label: Rationale 46 | description: Why does this belong in Django? Please explain why this functionality belongs in Django core rather than a separate package. 47 | validations: 48 | required: true 49 | 50 | - type: textarea 51 | id: additional-details 52 | attributes: 53 | label: Additional Details 54 | description: Please share any other details you may want. 55 | validations: 56 | required: false 57 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Django Security Issues 4 | url: https://docs.djangoproject.com/en/dev/internals/contributing/bugs-and-features/#reporting-security-issues 5 | about: Please report security vulnerabilities according to our security guidelines. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature 3 | description: Suggest a new feature or enhancement 4 | labels: ['type / feature', 'phase / new'] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for taking time to suggest your idea! Please be aware that this process takes a while (at least weeks). We appreciate your patience! 10 | 11 | If you haven't already, [please go search the existing issues for ideas similar to yours](https://github.com/django/new-features/issues?q=is%3Aissue). 12 | 13 | If English isn't your native language, let us know and do your best. If you'd like, you can answer in your native language and we'll use translation tools. 14 | 15 | - type: checkboxes 16 | id: terms 17 | attributes: 18 | label: Code of Conduct 19 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://www.djangoproject.com/conduct/) 20 | options: 21 | - label: I agree to follow Django's Code of Conduct 22 | required: true 23 | 24 | - type: textarea 25 | id: feature-description 26 | attributes: 27 | label: Feature Description 28 | description: Describe your idea in a sentence or two. 29 | placeholder: A clear and concise description of what you'd like to see. 30 | validations: 31 | required: true 32 | 33 | - type: textarea 34 | id: problem 35 | attributes: 36 | label: Problem 37 | description: What problem(s) does this solve? Please explain the problem or problems this feature would address. 38 | validations: 39 | required: true 40 | 41 | - type: dropdown 42 | id: request 43 | attributes: 44 | label: Request or proposal 45 | description: Do you propose being part of the team that will implement the feature or are you requesting for a feature to be built by others 46 | options: 47 | - request 48 | - proposal 49 | validations: 50 | required: true 51 | 52 | - type: textarea 53 | id: additional-details 54 | attributes: 55 | label: Additional Details 56 | description: Please share any other details you have. Please provide any additional context, screenshots, or examples that might help. 57 | validations: 58 | required: false 59 | 60 | - type: textarea 61 | id: implementation 62 | attributes: 63 | label: Implementation Suggestions 64 | description: Can you share your suggestion(s) on how to implement this? This doesn't need to be the solution or even a POC. Sometimes it's easier for people to think about a feature when they can see part of the code. 65 | validations: 66 | required: false 67 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/merge_third_party_package.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Merge third-party package 3 | description: Propose merging a third-party package into Django 4 | labels: ['type / merge-package', 'phase / new'] 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Please be aware that this process takes a while (at least weeks). We appreciate your patience! 10 | 11 | If you haven't already, [please go search the existing issues for ideas similar to yours](https://github.com/django/new-features/issues?q=is%3Aissue). 12 | 13 | If English isn't your native language, let us know and do your best. If you'd like, you can answer in your native language and we'll use translation tools. 14 | 15 | - type: checkboxes 16 | id: terms 17 | attributes: 18 | label: Code of Conduct 19 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://www.djangoproject.com/conduct/) 20 | options: 21 | - label: I agree to follow Django's Code of Conduct 22 | required: true 23 | 24 | - type: input 25 | id: package-name 26 | attributes: 27 | label: Package Information 28 | description: Which package are you wanting to merge into Django? 29 | validations: 30 | required: true 31 | 32 | - type: textarea 33 | id: problem 34 | attributes: 35 | label: Problem 36 | description: What problem(s) does this solve? Please explain the problem or problems this feature would address. 37 | validations: 38 | required: true 39 | 40 | - type: textarea 41 | id: rationale 42 | attributes: 43 | label: Rationale 44 | description: Why does this belong in Django? Please explain why this functionality belongs in Django core rather than remaining a separate package. 45 | validations: 46 | required: true 47 | 48 | - type: textarea 49 | id: additional-details 50 | attributes: 51 | label: Additional Details 52 | description: Please share any other details you may want. 53 | validations: 54 | required: false 55 | 56 | - type: textarea 57 | id: implementation 58 | attributes: 59 | label: Implementation Details 60 | description: Do you have any implementation details you'd like to share? 61 | validations: 62 | required: false 63 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | - name: "Django Core" 2 | color: "3FBE38" 3 | description: "This idea is suitable for inclusion in Django itself" 4 | - name: "Third Party Package" 5 | color: "2898D8" 6 | description: "This idea is suitable for the third party package ecosystem" 7 | - name: "Admin" 8 | color: "5319E7" 9 | - name: "Async" 10 | color: "5319E7" 11 | - name: "Authentication/Users" 12 | color: "5319E7" 13 | - name: "Contributing to Django" 14 | color: "5319E7" 15 | - name: "Documentation" 16 | color: "5319E7" 17 | - name: "Frontend/JavaScript" 18 | color: "5319E7" 19 | - name: "Forms" 20 | color: "5319E7" 21 | - name: "GeoDjango" 22 | color: "5319E7" 23 | - name: "Internationalization" 24 | color: "5319E7" 25 | - name: "Middleware" 26 | color: "5319E7" 27 | - name: "Migrations" 28 | color: "5319E7" 29 | - name: "Models/ORM" 30 | color: "5319E7" 31 | - name: "Rest APIs" 32 | color: "5319E7" 33 | - name: "Templates" 34 | color: "5319E7" 35 | - name: "Testing" 36 | color: "5319E7" 37 | - name: "URLs" 38 | color: "5319E7" 39 | - name: "Views" 40 | color: "5319E7" 41 | -------------------------------------------------------------------------------- /.github/workflows/new_issue_first_comment.yml: -------------------------------------------------------------------------------- 1 | name: Auto Comment on New Issues 2 | 3 | on: 4 | issues: 5 | types: [opened] 6 | env: 7 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 8 | MY_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 9 | 10 | jobs: 11 | auto-comment: 12 | runs-on: ubuntu-latest 13 | permissions: 14 | issues: write 15 | steps: 16 | - name: Auto Comment 17 | uses: actions/github-script@v7 18 | with: 19 | github-token: ${{ secrets.GITHUB_TOKEN }} 20 | script: | 21 | const creator = context.payload.issue.user.login; 22 | 23 | const commentBody = `Thank you ${creator} for sharing your idea! We have a lot of them so please be patient. You can see the current queue here. 24 | 25 | ### Community instructions 26 | For commenters, please use the emoji reactions on the issue to express support, and/or concern easily. Please use the comments to ask questions or contribute knowledge about the idea. It is unhelpful to post comments of "I'd love this" or "What's the state of this?" 27 | 28 | ### Reaction Guide 29 | - 👍 This is something I would use 30 | - 👎 This is something that would cause problems for me or Django 31 | - 😕 I’m indifferent to this 32 | - 🎉 This is an easy win 33 | `; 34 | 35 | github.rest.issues.createComment({ 36 | issue_number: context.issue.number, 37 | owner: context.repo.owner, 38 | repo: context.repo.repo, 39 | body: commentBody 40 | }); 41 | -------------------------------------------------------------------------------- /.github/workflows/setup_labels.yml: -------------------------------------------------------------------------------- 1 | name: Setup Repository Labels 2 | 3 | on: 4 | workflow_dispatch: # Allows manual triggering 5 | 6 | jobs: 7 | sync-labels: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | issues: write 11 | steps: 12 | - uses: actions/checkout@v2 13 | - uses: micnncim/action-label-syncer@v1 14 | name: Sync Labels 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Django Features 2 | 3 | We are currently testing a way to propose new features to Django. 4 | 5 | For browsing purposes you might like [the kanban view of this repo](https://github.com/orgs/django/projects/24/views/1) better. 6 | 7 | The README on this repo is very much a work in progress and is likely to change according to the feedback we get as well as the teachings its usage will bring us. 8 | 9 | ## Have an idea for Django? 10 | 11 | Please know, things in Django take a while. You will need to be patient. 12 | 13 | Please start with reviewing the [new feature process in Django](#djangos-new-feature-process). 14 | 15 | Next, go [create an issue in this repository](https://github.com/django/new-features/issues/new). 16 | 17 | ## Want to help steer Django? 18 | 19 | There are three queues that need community involvement: 20 | 21 | - [Is there community support?](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20is%20there%20community%20support%22) 22 | - Review the open tickets in this queue. Please share support on this via emojis. 23 | - Please follow the [Emoji Reaction guide](#emoji-reaction-guide) 24 | - See [Is there community support?](#is-there-community-support) for more details 25 | - [Is a feature expected in Django core?](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20is%20this%20expected%20in%20core%22) 26 | - Weigh-in on whether a feature should exist in Django core 27 | - See [Is this expected in Django?](#is-this-expected-in-django) for more details 28 | - [Needing volunteers to implement or implementation review](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20needs%20community%20DEP%22) 29 | - Help implement or design features 30 | - See [Can we do it?](#can-we-do-it) for more details 31 | 32 | ### Leaving comments 33 | 34 | The community is encouraged to engage in discussion about a feature idea. Please try to 35 | avoid one-on-one discussions here though when possible. Long threads are difficult to 36 | follow and require a person to summarize periodically. 37 | 38 | ### Things not to do 39 | 40 | Please avoid doing the following: 41 | 42 | - Writing comments that are "+1" or "-1". Use emojis to share those opinions, please. 43 | - Writing comments that are "What's the state of this?" You can see which phase of the process the idea is in by looking at the labels 44 | 45 | 46 | ## Django's new feature process 47 | 48 | This repository is used to contain Django's new feature process. The 49 | purpose is to identify features that the community deems helpful and 50 | necessary to exist within Django. 51 | 52 | The high level flow of the process can be seen in the chart below: 53 | 54 | ```mermaid 55 | flowchart TD 56 | newIdea[New Idea]@{ shape: circle} --> isGood{Is there community support?} 57 | isGood -->|No| wontfix[Won't Fix] 58 | isGood -->|Yes|featureType{Is this expected in Django?} 59 | featureType --> |No|delightful{Can it be a 3rd party package?} 60 | featureType --> |Yes|scDEP[SC drafts DEP] 61 | scDEP --> expected{Can we do it?} 62 | expected --> |Yes|scDEPFinish[Implementor finishes DEP] 63 | expected --> |wait for resources| expected 64 | scDEPFinish --> tracCreated[Create Trac ticket / Implement] 65 | delightful --> |Yes|package[Create a package]@{ shape: dbl-circ} 66 | delightful --> |No|authorDEP[Author creates DEP] 67 | authorDEP --> |Rejected|wontfix@{ shape: dbl-circ} 68 | authorDEP --> |Approved|tracCreated@{ shape: dbl-circ} 69 | ``` 70 | 71 | ### Is there community support? 72 | 73 | The initial phase of every feature is understanding if there's community 74 | support for an idea. Community members should express their opinion in 75 | two ways: 76 | 77 | - An emoji reaction for simple opinions 78 | - A written comment for detailed support or criticism 79 | 80 | #### Emoji reaction guide 81 | 82 | Using the following emojis on an issue has the related meaning. 83 | 84 | - 👍 This is something I would use 85 | - 👎 This is something that would cause problems for me or Django 86 | - 😕 I’m indifferent to this 87 | - 🎉 This is an easy win 88 | 89 | #### Raising awareness 90 | 91 | If you've created a feature request and want to bring more attention to it, 92 | you should consider some of the following: 93 | 94 | - Post about it on Social Media with the #Django hashtag 95 | - Post about it on the [Django Forum](https://forum.djangoproject.com/) 96 | - Write a blog post 97 | - Create a video 98 | - Give a conference talk 99 | 100 | The larger your idea, the more investment you may need to make to convince 101 | the community to support it. 102 | 103 | #### How is community support determined? 104 | 105 | The [Steering Council](https://docs.djangoproject.com/en/dev/internals/organization/#steering-council) 106 | will review issues periodically. They will review 107 | a subset of issues in this category and determine whether there's community 108 | support for an idea. This is to the Steering Council's discretion. 109 | 110 | ### Is this expected in Django? 111 | 112 | The phase after there's community support is the phase to determine if the 113 | feature idea is expected in Django core. Community members are encouraged to 114 | voice their opinion on why something is or is not expected in Django. 115 | 116 | #### How are features determined to be within Django? 117 | 118 | The Steering Council will review issues periodically. They will review a 119 | subset of issues in this category and weigh the perspectives of the 120 | community and determine whether a feature should be added to Django. 121 | This is to the Steering Council's discretion. 122 | 123 | ### Can we do it? 124 | 125 | The phase after it's agreed upon that the feature belongs in Django is 126 | determining whether the feature can be implemented. Advancing beyond this 127 | phase requires a [DEP](#expedited-dep-process) to be created. 128 | The [Steering Council](https://docs.djangoproject.com/en/dev/internals/organization/#steering-council) or a community 129 | member can create the first draft. It should contain everything but the 130 | technical details of implementation (unless those are known already). 131 | The community needs a person or a group of people to volunteer to implement 132 | the feature. 133 | 134 | For smaller issues, several steps of the DEP process can be skipped as 135 | they will already have occurred. 136 | 137 | For larger issues, the DEP process should be followed, more closely. 138 | This is because the actual implementation of the feature will need 139 | to be agreed upon before any code can be merged. 140 | 141 | #### How do we determine if we can do it? 142 | 143 | When there is a DEP that the Steering Council is in agreement upon which 144 | has everything but perhaps the last of the technical details, a Trac 145 | ticket can be created and implementation Pull Requests to Django can 146 | be sent. 147 | 148 | This does not mean work can't start beforehand, but we shouldn't ask for 149 | Fellow's involvement until these things are completed. 150 | 151 | 152 | ### Can the feature be a third-party package? 153 | 154 | The phase when it's determined that a feature has community support, but 155 | shouldn't be in Django core is determining whether the feature should be a 156 | third-party package. Most features should strive to be third-party packages. 157 | This approach allows for faster iteration and more variability in our 158 | ecosystem. 159 | 160 | It's possible that a feature can't be a third-party package due to the nature 161 | of the feature or limitations of Django. In this case, the DEP process should 162 | be followed. This [DEP](#expedited-dep-process) must be written by 163 | a community member rather than the [Steering Council](https://docs.djangoproject.com/en/dev/internals/organization/#steering-council). 164 | 165 | 166 | ## Expedited DEP process 167 | 168 | This new feature process has overlap with the existing [DEP process](https://github.com/django/deps/). 169 | This allows us to expedite the DEP process depending on the size of the feature 170 | according to the table below. It's still important to use DEPs to identify 171 | the rationale, motivation and considerations of features. We're all shepherds 172 | of Django, and we owe it to future maintainers to explain why we choose to add things. 173 | 174 | | Feature Size | Days to Weeks | Months | Quarters | 175 | |------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------| 176 | | [Pre-posal](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#pre-proposal) | Completed in [Is there community support](#is-there-community-support) | Completed in [Is there community support](#is-there-community-support) | Completed in [Is there community support](#is-there-community-support) | 177 | | [Forming the team](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#forming-the-team) | Author: Steering Council.
Implementation team: Feature proposer or community member
Shepherd: N/A | Author: Steering Council.
Implementation team: Feature proposer or community member
Shepherd: Community member, Fellow, Steering Council member | Author: Steering Council.
Implementation team: Feature proposer or community member
Shepherd: Community member, Fellow, Steering Council member | 178 | | [Submitting the draft](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#submitting-the-draft) | No forum discussion, just create draft Pull Request | No forum discussion, just create draft Pull Request | Follow DEP process | 179 | | [Discussion, development, and updates](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#discussion-development-and-updates) | N/A unless the Steering Council pushes it back | N/A unless the Steering Council pushes it back | Follow DEP process | 180 | | [Review & Resolution](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#review-resolution) | Follow DEP process | Follow DEP process | Follow DEP process | 181 | | [Implementation](https://github.com/django/deps/blob/main/final/0001-dep-process.rst#implementation) | Follow DEP process | Follow DEP process | Follow DEP process | 182 | 183 | The Steering Council can draft DEPs on behalf of the community because when an idea passes 184 | through [Is this expected in Django?](#is-this-expected-in-django), the following sections 185 | will have been discussed and determined: 186 | 187 | - Title 188 | - Preamble 189 | - Abstract 190 | - Motivation 191 | - Rationale 192 | - Copyright 193 | 194 | The remaining three sections will need to be written by a community member, 195 | likely the person or group of people who will be implementing the feature. 196 | 197 | - Specification 198 | - Backwards Compatibility 199 | - Reference Implementation 200 | 201 | ## Do you have feedback about the process? 202 | 203 | Please share your opinions on the [Forum](https://forum.djangoproject.com/c/internals/5). 204 | 205 | ## Steering Council guidance 206 | 207 | There are several tasks that the Steering Council should take to 208 | maintain the backlog of ideas. Not every idea must be reviewed at 209 | every interval, but some ideas should constantly be moving forward. 210 | 211 | ### Triaging new ideas 212 | 213 | - [Queue to review](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20(no%3Alabel%20OR%20label%3A%22phase%20%2F%20new%22)) 214 | - Any relevant labels should be applied to the issue 215 | - If the issue is a duplicate of another, it should be closed and referred to the original 216 | - The concerns of triaging are: 217 | - Clarity of the proposal 218 | - Label usage 219 | - Duplicates 220 | 221 | ### Determining consensus on community support 222 | 223 | - [Queue to review](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20is%20there%20community%20support%22%20) 224 | - The issues should be reviewed to determine if the community has arrived at consensus 225 | - The question here is, “Does the community think this change is good for Django?” 226 | - People who expressed significant disagreement may be asked to explain their disagreement 227 | - When reviewing the issue, ignore the following as it’s irrelevant to this stage of the process 228 | - It’s really hard to do 229 | - We don’t have the capacity to implement this 230 | - Potential results 231 | - Nothing, because community discussion is ongoing or more is needed 232 | - Consensus on yes, remove the "Is there community support" label and add "Is this expected in Django" label 233 | - Consensus on no, the issue is closed 234 | - The discussion and decision should be summarized into a single post by the team 235 | - Next steps need to be communicated 236 | 237 | ### Determining is this expected in Django 238 | 239 | - [Queue to review](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20is%20this%20expected%20in%20core%22) 240 | - The issue should be reviewed to determine if the idea is expected to be in Django 241 | - Features that should be merged into core Django are: 242 | - Proven to be integral to Django a significant number of applications 243 | - The design or need of the feature going to be stable for years 244 | - When reviewing the issue, ignore the following as it’s irrelevant to this stage of the process 245 | - It’s really hard to do 246 | - We don’t have the capacity to implement this 247 | - Feasibility of making it a third-party app 248 | - The changes to support an easier integration should be proposed separately 249 | - Potential results 250 | - Nothing, because community discussion is ongoing or more is needed 251 | - Consensus on yes, remove the "Is this expected in Django" label and add "needs SC DEP" label 252 | - Consensus on no, the issue is closed or remove "Is this expected in Django" label and add "third-party package" label 253 | - The discussion and decision should be summarized into a single post by the team 254 | - Next steps need to be communicated 255 | 256 | ### Creating DEPs for expected features 257 | 258 | - [Queue to review](https://github.com/django/new-features/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22phase%20%2F%20needs%20SC%20DEP%22) 259 | - The issue should have a DEP created at 260 | - It should contain the following sections: 261 | - Title 262 | - Preamble 263 | - Abstract 264 | - Motivation 265 | - Rationale 266 | - Copyright 267 | - The technical detail sections can be left for the community member who implements the feature 268 | - When the Steering Council agrees on the above sections: 269 | 1. Remove "needs SC DEP" label and add "needs community DEP" 270 | 2. Add links/references between DEP draft and the feature idea issue 271 | -------------------------------------------------------------------------------- /setup/start.md: -------------------------------------------------------------------------------- 1 | # Set up instructions 2 | 3 | This is for the folks who set up the final feature repo. 4 | 5 | ## Labels 6 | 7 | Create the following labels in github. Use the .github/labels.json file 8 | --------------------------------------------------------------------------------