# Modules Part 03: Minimal Version Selection

DevFeed: [Modules Part 03: Minimal Version Selection](<https://devfeed.tech/articles/modules-part-03-minimal-version-selection-22155.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2019/12/modules-03-minimal-version-selection.html>)

Published: 2019-12-18T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [modules](<https://devfeed.tech/topics/modules.md>), [Go Language](<https://devfeed.tech/topics/go-language.md>), [Dependency management](<https://devfeed.tech/topics/dependency-management.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [reproducible builds](<https://devfeed.tech/topics/reproducible-builds.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [dependency-management](<https://devfeed.tech/tags/dependency-management.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [modules](<https://devfeed.tech/tags/modules.md>), [programming](<https://devfeed.tech/tags/programming.md>), [reproducible-builds](<https://devfeed.tech/tags/reproducible-builds.md>)

## AI overview

This tutorial explains Go's Minimal Version Selection algorithm for choosing dependency versions. It contrasts MVS with approaches that select the latest version and illustrates how multiple modules can require different versions of a shared dependency.

## Source excerpt

Series Index Why and What Projects, Dependencies and Gopls Minimal Version Selection Mirrors, Checksums and Athens Gopls Improvements Vendoring Introduction Every dependency management solution has to solve the problem of picking a version of a dependency. Many of the version selection algorithms that exist today attempt to identify the "latest greatest" version of any dependency. This makes sense if you believe semantic versioning will be applied correctly and the social contract will be respected. In these cases, the "latest greatest" version of a dependency should be the most stable and secure version and should have backwards compatibility with earlier versions. At least in the same major version dependency tree.