# Versions

How Versia numbers protocol versions, and how instances choose one to talk to each other.

Versia Protocol versions are written as `0.X.Y`:

- `X` changes when a release breaks compatibility with earlier versions. Adding a core entity type is a breaking change.
- `Y` changes when a release stays compatible with other `0.X` versions, for example by adding an optional field.

Every Versia API endpoint is prefixed with `/.versia/v0.X/`, so all `0.X.Y` versions share one prefix. The current prefix is `/.versia/v0.7/`. Instances list the versions they support at the [well-known endpoint](/federation/endpoints#well-known).

> ActivityPub has no protocol versions. Matrix versions its specification and each endpoint separately. See [Other Protocols](/other-protocols#concepts).

Implementations have no obligation to support more than one Versia version. They **SHOULD** support the latest version, as it helps avoid bogging down the network with old versions.

## Choosing a Version

To talk to another instance, a sender reads its [well-known endpoint](/federation/endpoints#well-known) and uses the highest `0.X` that both instances support, at that version's prefix.

Instances that share `X` but differ in `Y` **MUST** interoperate. Instances with no `X` in common **MUST NOT** federate.

Entities do not state a version: the prefix they are sent or fetched at decides it.
