1API stability 2============= 3 4From its first release, ``cryptography`` has had a strong API stability 5policy. 6 7What does this policy cover? 8---------------------------- 9 10This policy includes any API or behavior that is documented in this 11documentation. 12 13What does "stable" mean? 14------------------------ 15 16* Public APIs will not be removed or renamed without providing a compatibility 17 alias. 18* The behavior of existing APIs will not change. 19 20What doesn't this policy cover? 21------------------------------- 22 23* We may add new features, things like the result of ``dir(obj))`` or the 24 contents of ``obj.__dict__`` may change. 25* Objects are not guaranteed to be pickleable, and pickled objects from one 26 version of ``cryptography`` may not be loadable in future versions. 27* Development versions of ``cryptography``. Before a feature is in a release, 28 it is not covered by this policy and may change. 29 30Security 31~~~~~~~~ 32 33One exception to our API stability policy is for security. We will violate this 34policy as necessary in order to resolve a security issue or harden 35``cryptography`` against a possible attack. 36 37Versioning 38---------- 39 40This project uses a custom versioning scheme as described below. 41 42Given a version ``cryptography X.Y.Z``, 43 44* ``X.Y`` is a decimal number that is incremented for 45 potentially-backwards-incompatible releases. 46 47 * This increases like a standard decimal. 48 In other words, 0.9 is the ninth release, and 1.0 is the tenth (not 0.10). 49 The dividing decimal point can effectively be ignored. 50 51* ``Z`` is an integer that is incremented for backward-compatible releases. 52 53Deprecation 54~~~~~~~~~~~ 55 56From time to time we will want to change the behavior of an API or remove it 57entirely. In that case, here's how the process will work: 58 59* In ``cryptography X.Y`` the feature exists. 60* In ``cryptography X.Y + 0.1`` using that feature will emit a 61 ``UserWarning``. 62* In ``cryptography X.Y + 0.2`` using that feature will emit a 63 ``UserWarning``. 64* In ``cryptography X.Y + 0.3`` the feature will be removed or changed. 65 66In short, code that runs without warnings will always continue to work for a 67period of two releases. 68 69From time to time, we may decide to deprecate an API that is particularly 70widely used. In these cases, we may decide to provide an extended deprecation 71period, at our discretion. 72