in the [Releases section](https://github.com/SeldonIO/MLServer/releases) of
1. Once you are happy with the draft, click `Publish`.
For official releases, MLServer uses long-lived release branches.
These branches will always follow the `release/<major>.<minor>.x` pattern (e.g.
`release/1.2.x`) and will be used for every `<major>.<minor>.x` [official
release](versioning-scheme) (e.g. the `release/1.2.x` will be used for
`1.2.0`, `1.2.1`, etc.).
Note that these branches will always be pushed straight to the main
`github.com/SeldonIO/MLServer` and not to a fork and will never get merged with
Therefore, when starting a new **major or minor official release** please
create a `release/<major>.<minor>.x` branch.
Alternatively, when preparing a **patch official release**, please
_cherry-pick_ all relevant merged PRs from `master` into the existing
The MLServer project publishes three types of release versions:
- **Dev pre-releases**, used to test new features before an official release.
They will follow the schema `<next-minor-version>.dev<incremental-index>`
- **Release candidates**, used to test an official release before the actual
This type of releases can be useful to test minor releases across different
projects. They follow the schema `<next-minor-version>.rc<incremental-index>`
- **Official releases**, used only for actual public releases. The version tag
will only contain the next minor version (e.g. `1.2.0`), without any
Based on the above, a usual release cycle between two official releases would
generally look like the following (where stability increases as you go down on
Each release of MLServer will build and publish a set of artifacts, both at the
runtime level and the wider MLServer level:
- Docker image containing every inference runtime maintained within the
MLServer repo, tagged as `seldonio/mlserver:<version>` (e.g.
Note that this image can grow quite large.
- _Slim_ Docker image containing only the core MLServer package (i.e. without
any runtimes), tagged as `seldonio/mlserver:<version>-slim` (e.g.
This image is used, as the default for custom runtimes.
- Python package for the core MLServer modules (i.e. without any runtime),
which will get published in PyPI, named simply `mlserver`.
- For each inference runtime (e.g. `mlserver-sklearn`, `mlserver-xgboost`,
- Docker image containing only that specific runtime, tagged as
- Python package for the specific runtime, which will get published in PyPI