Guide for updating MIF dependency versions. Use this skill when asked to bump, update, or upgrade a dependency such as Odin, Odin-CRD, LWS, Heimdall, heimdall-proxy, moreh-vLLM presets, moai-inference-framework, or moai-inference-preset. Covers which files to modify, how to run updates, and how to verify the result.
MIF depends on several components whose versions are tracked across Helm charts, container image references, preset directories, and website documentation. This guide ensures all references are updated consistently when bumping a dependency. After every version bump, you must also update the version table in website/docs/operations/latest-release.mdx.
| Component | Type | Version Locations |
|---|---|---|
| Odin + Odin-CRD | Helm sub-chart | deploy/helm/moai-inference-framework/Chart.yaml |
| LWS | Helm sub-chart | deploy/helm/moai-inference-framework/Chart.yaml |
| Heimdall |
| External Helm chart |
website/docs/getting-started/quickstart.mdx |
| heimdall-proxy | Container image | deploy/helm/moai-inference-preset/templates/runtime-bases/*.helm.yaml, deploy/helm/moai-inference-preset/templates/utils/*.helm.yaml |
| moreh-vLLM preset | Preset directory | deploy/helm/moai-inference-preset/templates/presets/moreh-vllm/ |
| moai-inference-framework | MIF chart release | website/docs/getting-started/prerequisites.mdx, website/docs/getting-started/quickstart.mdx |
| moai-inference-preset | MIF chart release | website/docs/getting-started/prerequisites.mdx, website/docs/getting-started/quickstart.mdx |
Required information: target version.
Steps:
deploy/helm/moai-inference-framework/Chart.yaml:
dependencies entry matching the component name.version field to the target version.odin and odin-crd entries to the same version.make helm-dependency to regenerate Chart.lock and download updated .tgz archives.make helm-docs to regenerate chart README documentation.make helm-lint to verify the chart is valid.website/docs/ for references to the updated component and update if needed (see Website Updates for Spec Changes).InferenceServiceTemplateSpec. If it does, update presets and runtime-bases accordingly (see Coordinated Odin + Preset Changes).Adding a new sub-chart dependency:
If a component is not yet listed in Chart.yaml, add a new entry following the existing pattern:
- name: <component>
version: <target-version>
repository: <chart-repo-url> # ask user
condition: <component>.enabled
Then add the corresponding enablement default in values.yaml:
<component>:
enabled: true
Heimdall is deployed as a separate Helm chart (moreh/heimdall from https://moreh-dev.github.io/helm-charts), not as a sub-chart of moai-inference-framework.
Required information: target version. If the new version includes config or API changes, also ask for the Heimdall source repository URL to review the changes.
Steps:
--version in website/docs/getting-started/quickstart.mdx (the helm upgrade -i heimdall moreh/heimdall command).website/docs/ for other Heimdall version references and update them.--recurse-submodules and review what changed between the old and new version tags. Heimdall uses Git submodules for its core components, so check both the main repo diff (git diff <old-tag>..<new-tag>) and the submodule commit ranges for plugin or API changes. Use git ls-tree <tag> third_party/ to get the submodule commit SHAs at each tag, then diff within each submodule.plugins.mdx:
kvblock.IndexConfig), it must be documented under the corresponding nested header, not the parent.json:",inline"). Go's inline tag flattens fields from composed structs into the parent JSON, so these fields must appear in the parent's parameter table.register.go (both the main repo and submodule repos) are documented, and any unregistered plugins are not.website/docs/reference/heimdall/api-reference.mdx — InferencePool and related CRD fieldswebsite/docs/reference/heimdall/plugins.mdx — plugin parameters, new plugins, removed pluginswebsite/docs/getting-started/quickstart.mdx — heimdall-values.yaml example if config structure changedRequired information: target image tag (e.g., v0.7.0-rc.5).
Steps:
grep -r "heimdall-proxy:" deploy/helm/moai-inference-preset/templates/
deploy/helm/moai-inference-preset/templates/runtime-bases/*.helm.yamldeploy/helm/moai-inference-preset/templates/utils/*.helm.yamlRequired information: new version string, which models/configs are affected, any changes to vLLM arguments or resource requirements.
Steps:
deploy/helm/moai-inference-preset/templates/presets/moreh-vllm/<version>/
deploy/helm/AGENTS.md.hack/gen_moreh_vllm_presets.py if the preset template structure changes (new spec fields, env var additions/removals, etc.).templates/presets/quickstart/, templates/presets/deepseek-r1/) if the structural change applies to all presets.templates/runtime-bases/*.helm.yaml) if the new version changes launch logic, proxy configuration, or disaggregation behavior.Required information: new chart release version (e.g., v0.4.0).
Steps:
website/docs/getting-started/prerequisites.mdx:
helm upgrade commands that specify --version.website/docs/getting-started/quickstart.mdx:
website/docs/ for any other references to the old version string.website/versioned_docs/ — these are frozen snapshots of past versions.Chart.yaml version or appVersion fields — these are set by CI/CD during release.When a dependency introduces API, CRD, or configuration changes (not just a version number bump):
website/docs/ for references to affected CRD kinds, field names, or config options:
grep -r "<old-field-or-kind>" website/docs/
InferenceService, InferenceServiceTemplate, templateRefs, inferencePoolRefsInferencePool, EndpointPickerConfig, plugin names/parameters, scheduling profiles, routing, load balancingLeaderWorkerSet, worker configurationwebsite/docs/features/preset.mdx (YAML examples of InferenceService / InferenceServiceTemplate), mif.moreh.io/* labelsWhen an Odin CRD bump adds new fields to InferenceServiceTemplateSpec, presets and runtime-bases must be updated in lockstep.
Identifying changes: Clone or fetch the Odin source repo and diff the types between the old and new tags:
git diff <old-tag>..<new-tag> -- api/v1alpha1/inferenceservicetemplate_types.go
Updating presets: For fields that become part of the spec (e.g., model, framework):
spec:. A Python script is efficient for bulk updates across 100+ files — extract the field value from existing data (labels, env vars) and insert into the spec.hack/gen_moreh_vllm_presets.py so future presets include the new fields.Updating runtime-bases and utils: Runtime-bases and utils (sim templates) access spec fields via Odin template rendering:
# Odin template syntax (double-escaped for Helm passthrough)