# Deprecation Policy This document outlines the official policy and process for deprecating features in the vLLM project. ## Overview vLLM uses a structured "deprecation pipeline" to guide the lifecycle of deprecated features. This policy ensures that users are given clear and sufficient notice when a feature is deprecated and that deprecations proceed in a consistent and predictable manner. We aim to strike a balance between continued innovation and respecting users’ reliance on existing functionality. Deprecations are tied to our **minor (Y) releases** following semantic versioning (X.Y.Z), where: - **X** is a major version (rare) - **Y** is a minor version (used for significant changes, including deprecations/removals) - **Z** is a patch version (used for fixes and safer enhancements) Features that fall under this policy include (at a minimum) the following: - CLI flags - Environment variables - Configuration files - APIs in the OpenAI-compatible API server - Public Python APIs for the `vllm` library ## Deprecation Pipeline The deprecation process consists of several clearly defined stages that span multiple Y releases: **1. Deprecated (Still On By Default)** - **Action**: Feature is marked as deprecated. - **Timeline**: A removal version is explicitly stated in the deprecation warning (e.g., "This will be removed in v0.10.0"). - **Communication**: Deprecation is noted in the following, as applicable: - Help strings - Log output - API responses - `/metrics` output (for metrics features) - User-facing documentation - Release notes - GitHub Issue (RFC) for feedback - Documentation and use of the `@typing_extensions.deprecated` decorator for Python APIs **2.Deprecated (Off By Default)** - **Action**: Feature is disabled by default, but can still be re-enabled via a CLI flag or environment variable. Feature throws an error when used without re-enabling. - **Purpose**: Allows users who missed earlier warnings a temporary escape hatch while signaling imminent removal. Ensures any remaining usage is clearly surfaced and blocks silent breakage before full removal. **3. Removed** - **Action**: Feature is completely removed from the codebase. - **Note**: Only features that have passed through the previous deprecation stages will be removed. ## Example Timeline Assume a feature is deprecated in `v0.9.0`. | Release | Status | |---------------|-------------------------------------------------------------------------------------------------| | `v0.9.0` | Feature is deprecated with clear removal version listed. | | `v0.10.0` | Feature is now off by default, throws an error when used, and can be re-enabled for legacy use. | | `v0.11.0` | Feature is removed. | ## Important Guidelines - **No Removals in Patch Releases**: Removing deprecated features in patch (`.Z`) releases is disallowed to avoid surprising users. - **Grace Period for Existing Deprecations**: Any feature deprecated **before this policy** will have its grace period start **now**, not retroactively. - **Documentation is Critical**: Ensure every stage of the pipeline is documented clearly for users. ## Final Notes This policy is a living document and may evolve as the needs of the project and its users change. Community feedback is welcome and encouraged as we refine the process.