Proposal: Deprecate the Python plugin framework and consolidate on Go
Summary
Propose to deprecate the Python plugin framework (backend/python/, a.k.a. PyDevLake) and remove it from the codebase after a 3-month deprecation window. Going forward, all plugins should be written in Go. This reduces maintenance overhead, simplifies the Docker image and CI, and focuses contributor effort on a single, well-supported runtime.
Background
The Python plugin framework was introduced in Feb 2023 (#3702, #4438) to lower the barrier for writing plugins. In practice it never saw adoption:
Evidence: Python plugins are not being maintained
| Plugin |
Last meaningful commit |
Note |
azuredevops (Python) |
2025-12-31 feat: add environment_pattern (#8671) |
No feature/fix since; only deps refresh & runtime bumps |
pydevlake framework |
2025-12-31 (same as above) |
Last real fix: #8957 on 2026-07-15 (missing composite PKs) |
dbt (Python) |
removed 2026-08-31 (#8970) |
Already gone |
In the last ~12 months, the only commits touching backend/python/ are dependency refreshes, Poetry/uv lock bumps, a Python 3.9→3.11 runtime bump, and a single primary-key fix. Meanwhile the Go side shipped 40+ plugins and continues to receive features weekly.
Benefits
- One runtime to maintain. Eliminate the parallel PyDevLake framework, its RPC bridge,
pydevlake package, uv/Poetry tooling, and Python-specific test/build scripts.
- Simpler Docker build. Today
backend/Dockerfile is based on python:3.11-slim-bookworm, installs python3-dev/pip/uv, copies python/, and runs build.sh. After removal the image can be a slim Go-based image — smaller, fewer CVEs, faster builds. Dockerfile.local's "empty python plugins dir" workaround also goes away.
- Simpler CI. Two workflows (
.github/workflows/test.yml, test-e2e.yml) and Make targets (python-dep, python-unit-test, build-python, build-pydevlake) can be dropped.
- Clearer contributor story. New plugin authors get one path (Go) with 40+ reference implementations instead of choosing between two frameworks where one is unmaintained.
- No functional loss. The only remaining Python plugin (
azuredevops) is superseded by azuredevops_go, which already has broader feature coverage (Server/on-prem support).
Plan & Timeline
| Phase |
Window |
Actions |
| 1. Warning |
T+0 (on issue merge) |
Add deprecation notices to: backend/python/README.md, plugin README.mds, server startup log line, and config-ui plugin selection UI. Mark azuredevops (Python) as deprecated in the plugin registry; point users to azuredevops_go. |
| 2. Freeze |
T+1 month |
Stop accepting new features/fixes for Python plugins. Only critical security fixes land. Add a CI gate rejecting new files under backend/python/plugins/. |
| 3. Migration assist |
T+1~T+3 months |
Ship a migration guide + script to move any remaining azuredevops (Python) connections/scopes to azuredevops_go. Document data-layer equivalence. |
| 4. Removal |
T+3 months |
Delete backend/python/, PyDevLake, the Python Dockerfile stage, make python-* targets, and Python CI jobs. Remove azuredevops (Python) from the plugin registry. |
Total deprecation window: 3 months from the date this proposal is accepted.
Risks & Mitigations
- Existing users of
azuredevops (Python): Mitigated by azuredevops_go parity + migration guide in Phase 3. The Go plugin already covers cloud + on-prem.
- External contributors with in-progress Python plugins: The 3-month window + the warning phase gives them time to port. No private Python plugins are known to exist in the wild.
- Reverting later: Not needed; Go covers all current and planned use cases.
What we need
- 👍 / 👎 from maintainers and community on deprecating Python.
- Owners to confirm
azuredevops_go feature parity with the Python azuredevops plugin (esp. CI/CD environment extraction).
- Volunteers to write the Phase-3 migration guide.
Proposal: Deprecate the Python plugin framework and consolidate on Go
Summary
Propose to deprecate the Python plugin framework (
backend/python/, a.k.a. PyDevLake) and remove it from the codebase after a 3-month deprecation window. Going forward, all plugins should be written in Go. This reduces maintenance overhead, simplifies the Docker image and CI, and focuses contributor effort on a single, well-supported runtime.Background
The Python plugin framework was introduced in Feb 2023 (#3702, #4438) to lower the barrier for writing plugins. In practice it never saw adoption:
azuredevops(Python).dbtPython plugin was already removed on 2026-08-31 (Deprecate and Remove the dbt Plugin from Backend Components #8970).azuredevops_go, now exists and is actively developed (on-premises support landed 2026-08-16, Azure DevOps On-Premises Support #9014).Evidence: Python plugins are not being maintained
azuredevops(Python)feat: add environment_pattern(#8671)pydevlakeframeworkdbt(Python)In the last ~12 months, the only commits touching
backend/python/are dependency refreshes, Poetry/uv lock bumps, a Python 3.9→3.11 runtime bump, and a single primary-key fix. Meanwhile the Go side shipped 40+ plugins and continues to receive features weekly.Benefits
pydevlakepackage,uv/Poetry tooling, and Python-specific test/build scripts.backend/Dockerfileis based onpython:3.11-slim-bookworm, installs python3-dev/pip/uv, copiespython/, and runsbuild.sh. After removal the image can be a slim Go-based image — smaller, fewer CVEs, faster builds.Dockerfile.local's "empty python plugins dir" workaround also goes away..github/workflows/test.yml,test-e2e.yml) and Make targets (python-dep,python-unit-test,build-python,build-pydevlake) can be dropped.azuredevops) is superseded byazuredevops_go, which already has broader feature coverage (Server/on-prem support).Plan & Timeline
backend/python/README.md, pluginREADME.mds, server startup log line, andconfig-uiplugin selection UI. Markazuredevops(Python) as deprecated in the plugin registry; point users toazuredevops_go.backend/python/plugins/.azuredevops(Python) connections/scopes toazuredevops_go. Document data-layer equivalence.backend/python/, PyDevLake, the Python Dockerfile stage,make python-*targets, and Python CI jobs. Removeazuredevops(Python) from the plugin registry.Total deprecation window: 3 months from the date this proposal is accepted.
Risks & Mitigations
azuredevops(Python): Mitigated byazuredevops_goparity + migration guide in Phase 3. The Go plugin already covers cloud + on-prem.What we need
azuredevops_gofeature parity with the Pythonazuredevopsplugin (esp. CI/CD environment extraction).