Skip to content

Python Upgrade Plan #8356

@vinitkumar

Description

@vinitkumar

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 ⚠️ Expires soon 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)

  1. 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)
  2. 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
  3. 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
  4. 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
  5. 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
  6. Release

    • Create release candidate
    • Community testing period (2 weeks)
    • Final release with major version bump (if breaking)

Phase 2: Future Planning (Q4 2026)

  1. 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

  1. 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

  1. 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
  2. Python 3.10 Deprecation Notice (Q2 2026)

    • Add runtime warning for Python 3.10 users
    • Update documentation with timeline
    • Communicate on mailing lists/forums
  3. 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)

  1. Drop Python 3.8

    • Update
    • Remove 3.8 from classifiers and CI
    • Backport critical security fixes only
  2. 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)

  1. 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

  1. CI/CD Pipeline Updates

  2. Test Coverage

    • Unit tests across all Python versions
    • Integration tests with all Django versions
    • Migration tests (upgrade paths)
    • Third-party plugin compatibility
  3. Manual Testing Checklist

    • Admin interface functionality
    • Plugin system
    • Template rendering
    • Database operations
    • Static file handling
    • Internationalization

Communication Plan

Before Implementation

  1. RFC/Discussion Period (2 weeks)

    • Post RFC on django-cms mailing list
    • Create discussion thread
    • Gather community feedback
  2. Deprecation Notices

    • Send email to mailing list
    • Post on official blog
    • Update documentation with warnings
    • Add runtime warnings in code (if applicable)

During Implementation

  1. Status Updates
    • Weekly progress updates
    • Beta/RC announcements
    • Known issues tracking

After Implementation

  1. 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

  1. Django 6.0 Timeline: Should we wait for Django 6.0 stable before dropping 3.10/3.11?
  2. Release Strategy: Major version bump for Python 3.8/3.9 removal?
  3. LTS Policy: What's the long-term support policy for release/5.x?
  4. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions