├── .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 |
--------------------------------------------------------------------------------