> For the complete documentation index, see [llms.txt](https://bitforce.gitbook.io/the-anatomy-of-an-angular-app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bitforce.gitbook.io/the-anatomy-of-an-angular-app/conventional-changelog-and-semver.md).

# Semantic Versioning

## About

**Semantic Versioning** (SemVer) is a versioning system that help us keep track of what’s going on in projects.

SemVer is a 3-component system in the format:

* **x** stands for a major version
* **y** stands for a minor version
* **z** stands for a patch

**Major**.**Minor**.**Patch**, increment cases:

* **Major** version when you make incompatible API changes
* **Minor** version when you add functionality in a backwards-compatible manner
* **Patch** version when you make backwards-compatible bug fixes

## Benefits

* keep a semantic historical track of a component
* know which version of a component is no longer backwards compatible
* avoid dependency hell when using a component in different places
* allow a component to be distributed correctly with package managers

## Pre-release

With Semantic Versioning, pre-releases can be defined by appending a hyphen and an identifier to a version. For example:

* 1.0.0 -> 1.0.0-alpha.1
* 1.0.0 -> 1.0.0-alpha.2

## How to use that

There are two ways for requiring a lib via semver number.

* **Static:** eg: `"fancylib": "1.5.4"`. This mean that you'll get fancyLib version 1.5.4 and that will be fixed in the project. npm install / npm update will not change that version
* **Dynamic**. You can use this three symbols `^ ~ *` when you specify the semver
  * `^` this can be used at the beginning of the semver. this means that you'll get the latest minor and patch updates for the specified major
  * `~` this can be used at the beginning of the semver. this means that you'll get the latest patch updates for the specified major.minor
  * `*`This is a wildcard, let's see how it works
    * \*.0.0 you'll get the latest major,  minor , patch
    * 3.\*.0 you'll get the latest  minor , patch for the major 3 the same as `^`
    * 3.9.\* you'll get the latest patch for major 3, minor 9, the same as `~`

Is that tricky? You can check what your semver will download in your codebase using this handy [tool](https://semver.npmjs.com/)!

## Resources

* Official website [semver.org](https://semver.org/)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bitforce.gitbook.io/the-anatomy-of-an-angular-app/conventional-changelog-and-semver.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
