Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

P4 Server Administration Documentation | 2025.1

# Protocol levels: server/client

Perforce offers a variety of P4 application programming interfaces (APIs). Each release of the P4 Server or a P4 client is associated with a server protocol and a client protocol.

## Protocol levels affect functionality

As part of their initial communication, the client and server negotiate which protocol levels to use. A client release might use a client protocol associated with an earlier server release. For example, the 2022.2 P4V client uses client protocol 92, which is associated with the 2022.1 server release.

To ensure the server and client are compatible, functionality is limited to what both server and client support. See Protocol for server and clients by release.

The logs might show a protocol level instead of a release number. See Protocol for server and clients by release.

## Example of server protocol level

When launching a 2020.1 P4 Server with RPC tracing set to level 5 (-vrpc=5), the server protocol level of 50 appears on line 4 as the value of the server2 variable.

Copy

    1
    2
    3
    4
    5
    6
    7
    p4d -r . -p 1666 -vrpc=5
    RpcSendBuffer xfiles = 5
    RpcSendBuffer server = 3
    RpcSendBuffer server2 = 50
    RpcSendBuffer revver = 7
    RpcSendBuffer nocase =
    Perforce Server starting...

The server protocol level is unrelated to the Upgrades counter of the P4 Server Database Schema.

## Setting a client protocol level

If you are developing a client application with a P4 API, you can set the client protocol level for your application. By default, a P4 API uses a protocol level that matches the version of the API libraries. Therefore, it is often not necessary to set the protocol level value explicitly.

On the other hand, you might want to explicitly set a client protocol level to an earlier level if a later client protocol level provides information in a format that earlier client applications are unable to use.

For example, if you are using the P4 API for C/C++, you can call ClientAPI::SetProtocol("api","<value>"); and see the example code at ClientApi::SetProtocol( char *, char * ) in the P4 API for C/C++ Documentation.

## Protocol for server and clients by release

Each P4 Server release version is associated with a server protocol and a client protocol.

Release | Server Protocol | Client Protocol
--- | --- | ---
2025.1 | 60 | 98
2024.2 | 59 | 97
2024.1 | 58 | 96
2023.2 | 57 | 95
2023.1 | 56 | 94
2022.2 | 55 | 93
2022.1 | 54 | 92
2021.2 | 53 | 91
2021.1 | 52 | 90
2020.2 | 51 | 89
2020.1 | 50 | 88
2019.2 | 49 | 87
2019.1 patch 2 | 48 | -
2019.1 | 47 | 86
2018.2 | 46 | 85
2018.1 | 45 | 84
2017.2 | 44 | 83
2017.1 | 43 | 82
2016.2 | 42 | 81
2016.1 | 41 | 80
2015.2 | 40 | 79
2015.1 | 39 | 78
2014.2 | 38 | 77
2014.1 | 37 | 76
2013.3 | 36 | 75
2013.2 | 35 | 74
2013.1 | 34 | 73
2012.2 | 33 | 72
2012.1 | 32 | 71
2011.1 | 31 | 70
2011.1 early | - | 69 (action resolves disabled)
Release | Server Protocol | Client Protocol
--- | --- | ---
2010.2 | 30 | 68
2010.1 | 29 | 67
2009.2 | 28 | 66
2009.1 | 27 | 65
2008.2 | 26 | 64
2008.1 | 25 | 63
2007.3 | 24 | 62
2007.2 | 23 | 61
2006.2 | 22 | 60
2006.1 | 21 | 59
2005.2 | 20 | 58
2005.1 | 19 | -
2004.2 | 18 | -
2004.1 | - | 57
2003.2 | 17 | 56
2003.1 | 16 | -
2003.1 early | 15 | -
2002.2 | 14 | 55
2002.1 | 13 | 54
2001.2 | 12 | 52
2001.1 | 11 | 51
2000.2 | 10 | -
2000.1 | 9 | -
99.2 | 8 | 8
99.1 | 7 | 7
99.1 early | 6 | 6
98.2 | 5 | 5
98.2 early | 4 | -
98.1 | - | 4
97.3 | 3 | 3
97.2 | 2 | 2
97.1 | 1 | 1

Your search for returned results