-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Description
Executive Summary
This ticket outlines django-cms's Python version support strategy aligned with Python's security support lifecycle and Django 6.0 requirements.
Policy: django-cms will only support Python versions that are within their security support window as defined by endoflife.date/python.
Current Status Analysis (October 2025)
Python Security Support Timeline
Version | Security Support End | Status | Action Required |
---|---|---|---|
3.13 | Oct 31, 2029 | ✅ Supported | Add support |
3.12 | Oct 31, 2028 | ✅ Supported | Currently supported |
3.11 | Oct 31, 2027 | ✅ Supported | Currently supported |
3.10 | Oct 31, 2026 | ✅ Supported | Currently supported |
3.9 | Oct 31, 2025 | Drop Q4 2025 | |
3.8 | Oct 07, 2024 | ❌ EOL | Drop immediately |
Django Version Compatibility
- Django 6.0 (Dec 2025): Supports Python 3.12, 3.13 only
- Django 5.2: Last version to support Python 3.10, 3.11
- Django 4.2 LTS: Supports Python 3.8-3.12
Current django-cms State
- develop branch: Supports Python 3.7+ (outdated)
- release/5.x: Active development branch
- release/4.x: Maintenance mode
- release/3.x: Legacy
Implementation Plan by Branch
🎯 Branch: (Priority: HIGH)
Target Support: Python 3.10, 3.11, 3.12, 3.13 | Django 4.2 LTS, 5.0, 5.1, 5.2
Phase 1: Immediate Actions (Q4 2025)
-
Drop Python 3.8 & 3.9
- Update : Change
- Remove Python 3.8, 3.9 from classifiers
- Update CI/CD matrix in to remove 3.8, 3.9
- Update to remove py38, py39 environments
- Update documentation (README.md, installation docs)
-
Add Python 3.13 Support
- Add Python 3.13 to classifiers in
- Add py313 to CI/CD test matrix
- Add py313 to
- Test all features against Python 3.13
- Update documentation to list 3.13 as supported
-
Django Support Matrix Update
- Verify Django 4.2 LTS compatibility with Python 3.10-3.13
- Verify Django 5.0, 5.1, 5.2 compatibility
- Update Django version classifiers
-
Testing & Validation
- Run full test suite on Python 3.10, 3.11, 3.12, 3.13
- Test against Django 4.2, 5.0, 5.1, 5.2
- Verify all dependencies are compatible
- Update test fixtures if needed
-
Documentation Updates
- Update CHANGELOG.md with breaking changes
- Update migration guide for users on Python 3.8/3.9
- Update installation documentation
- Add deprecation notice to release notes
-
Release
- Create release candidate
- Community testing period (2 weeks)
- Final release with major version bump (if breaking)
Phase 2: Future Planning (Q4 2026)
- Drop Python 3.10 (After Oct 2026 EOL)
- Issue deprecation warning 6 months prior
- Follow same process as Phase 1 removal steps
- Minimum supported: Python 3.11
🎯 Branch: (Priority: HIGH)
Target Support: Align with release/5.x, prepare for Django 6.0
Phase 1: Q4 2025 - Sync with release/5.x
- Immediate Alignment
- Merge/backport all Python version changes from release/5.x
- Support Python 3.10, 3.11, 3.12, 3.13
- Drop Python 3.8, 3.9
Phase 2: Q1 2026 - Django 6.0 Preparation
-
Django 6.0 Compatibility Work
- Review Django 6.0 release notes for breaking changes
- Update deprecated Django APIs
- Test against Django 6.0 alpha/beta releases
- Consider dropping Python 3.10, 3.11 if targeting Django 6.0 only
-
Python 3.10 Deprecation Notice (Q2 2026)
- Add runtime warning for Python 3.10 users
- Update documentation with timeline
- Communicate on mailing lists/forums
-
Python 3.10 Removal (Q4 2026)
- Remove Python 3.10 support after security EOL
- Minimum supported: Python 3.11, 3.12, 3.13
🎯 Branch: (Priority: MEDIUM - Maintenance Only)
Target Support: Python 3.9, 3.10, 3.11 | Django 3.2, 4.0, 4.1, 4.2
Immediate Actions (Q4 2025)
-
Drop Python 3.8
- Update
- Remove 3.8 from classifiers and CI
- Backport critical security fixes only
-
Mark Branch as Maintenance Mode
- Update README with maintenance status
- Document EOL date: Q4 2026
- Direct new projects to release/5.x
Final Phase (Q4 2026)
- End of Life
- Final security release
- Archive branch
- Update documentation pointing to 5.x
🎯 Branch: (Priority: LOW - Legacy)
Status: No changes required, already in legacy mode
- Document as legacy/unsupported
- No further Python version updates
- Archive documentation
Testing Strategy
Automated Testing Requirements
-
CI/CD Pipeline Updates
-
Test Coverage
- Unit tests across all Python versions
- Integration tests with all Django versions
- Migration tests (upgrade paths)
- Third-party plugin compatibility
-
Manual Testing Checklist
- Admin interface functionality
- Plugin system
- Template rendering
- Database operations
- Static file handling
- Internationalization
Communication Plan
Before Implementation
-
RFC/Discussion Period (2 weeks)
- Post RFC on django-cms mailing list
- Create discussion thread
- Gather community feedback
-
Deprecation Notices
- Send email to mailing list
- Post on official blog
- Update documentation with warnings
- Add runtime warnings in code (if applicable)
During Implementation
- Status Updates
- Weekly progress updates
- Beta/RC announcements
- Known issues tracking
After Implementation
- Migration Support
- Publish migration guide
- Update FAQ
- Community support on forums
- Monitor issue tracker for upgrade problems
Timeline & Milestones
Q4 2025 (October - December)
- Week 1-2: Community RFC and feedback
- Week 3-4: Implementation for release/5.x
- Week 5-6: Testing and RC releases
- Week 7-8: Final release with Python 3.13 support, 3.8/3.9 dropped
Q1 2026 (January - March)
- Django 6.0 compatibility testing
- Begin Python 3.10 deprecation warnings
Q2 2026 (April - June)
- Active communication about Python 3.10 approaching EOL
- Beta testing without Python 3.10
Q4 2026 (October - December)
- Drop Python 3.10 support after security EOL
- EOL release/4.x branch
- Minimum support: Python 3.11+
Success Criteria
Technical
- ✅ All tests pass on Python 3.10, 3.11, 3.12, 3.13
- ✅ Django 4.2 LTS through 5.2 compatibility maintained
- ✅ Zero security vulnerabilities from EOL Python versions
- ✅ CI/CD pipeline updated and passing
- ✅ No breaking changes for supported versions
Documentation
- ✅ Updated installation guides
- ✅ Clear migration path documented
- ✅ Deprecation timeline published
- ✅ CHANGELOG entries complete
Community
- ✅ RFC feedback incorporated
- ✅ Migration support provided
- ✅ Smooth transition with minimal issues
- ✅ No critical bugs in Python 3.13 support
Risk Mitigation
Risk: Third-party Plugin Incompatibility
- Mitigation: Test popular plugins, provide compatibility list
- Fallback: Document workarounds, contact plugin maintainers
Risk: User Resistance to Upgrade
- Mitigation: Clear communication, extended timeline, migration guide
- Fallback: Maintain release/4.x longer if needed
Risk: Django 6.0 Breaking Changes
- Mitigation: Early testing with alpha/beta releases
- Fallback: Delay Django 6.0 support if necessary
Risk: CI/CD Capacity
- Mitigation: Optimize test matrix, use caching
- Fallback: Reduce combinatorial testing, focus on LTS versions
Dependencies & Prerequisites
Infrastructure
- GitHub Actions runners support Python 3.13
- Tox configuration updated
- Docker images available for Python 3.13
- RTD (Read the Docs) supports Python 3.13
Tooling
- Linters compatible (flake8, pylint, etc.)
- Type checkers updated (mypy, pyright)
- Coverage tools compatible
- Packaging tools support new versions
Documentation
- Versioned docs setup
- Migration guide template
- Deprecation notice template
Open Questions
- Django 6.0 Timeline: Should we wait for Django 6.0 stable before dropping 3.10/3.11?
- Release Strategy: Major version bump for Python 3.8/3.9 removal?
- LTS Policy: What's the long-term support policy for release/5.x?
- Plugin Ecosystem: How to coordinate with popular plugin maintainers?
References
Checklist Summary
Immediate Actions (This Quarter)
- Drop Python 3.8, 3.9 from release/5.x
- Add Python 3.13 support to release/5.x
- Update CI/CD pipelines
- Community RFC and communication
- Release updated version
Next 12 Months
- Django 6.0 compatibility work
- Deprecate Python 3.10
- EOL release/4.x branch
- Prepare for Python 3.11 as minimum