Skip to content

Instantly share code, notes, and snippets.

@brandonbloom
Last active July 19, 2025 05:44
Show Gist options
  • Select an option

  • Save brandonbloom/465625acaf0120354614e7fc0c117c62 to your computer and use it in GitHub Desktop.

Select an option

Save brandonbloom/465625acaf0120354614e7fc0c117c62 to your computer and use it in GitHub Desktop.

Revisions

  1. brandonbloom revised this gist Jul 19, 2025. No changes.
  2. brandonbloom revised this gist Mar 18, 2024. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion StableVer.md
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@ Version numbers have the short form:

    `<major>.<minor>`

    Breakings may only be introduced in major version bumps. However, no breaking change
    Breaking changes may only be introduced in major version bumps. However, no breaking change
    may be made to a feature unless it was declared deprecated in the _previous_ major version bump.

    A key property of projects that use StableVer is that it should always be possible to
  3. brandonbloom revised this gist Mar 18, 2024. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion StableVer.md
    Original file line number Diff line number Diff line change
    @@ -13,7 +13,7 @@ Breakings may only be introduced in major version bumps. However, no breaking ch
    may be made to a feature unless it was declared deprecated in the _previous_ major version bump.

    A key property of projects that use StableVer is that it should always be possible to
    migrate from major version N to major version N+1 without breakign changes -- provided that
    migrate from major version N to major version N+1 without breaking changes -- provided that
    you are not using any features that were marked deprecated in version N.

    ## Stability Status
  4. brandonbloom revised this gist Mar 17, 2024. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion StableVer.md
    Original file line number Diff line number Diff line change
    @@ -61,4 +61,5 @@ release. Bug fixes may introduce breaking changes within the _undefined_ portion
    features, but should be accompanied by guidance.

    Major version bumps _may_ be used for marketing purposes, even if there are no new deprecations
    or feature removals.
    or feature removals. This capacity should not be used to avoid providing sufficient migration
    time for deprecations.
  5. brandonbloom revised this gist Mar 17, 2024. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion StableVer.md
    Original file line number Diff line number Diff line change
    @@ -31,7 +31,8 @@ Unstable features fall in to five categories: **alpha**, **beta**,
    warning.

    **Beta** features _may_ experience breaking changes, but the goal is for them to
    stabilize, and so such breakage will be accompanied by guidance.
    stabilize, and so such breakage will be accompanied by guidance. It is not necessary
    to bump the major version when making changes to beta features.

    **Deprecated** features are previously _beta_ or _stable_ features that will be
    _removed_ in the next major version release. Warning and a migration plan will be provided.
  6. brandonbloom revised this gist Mar 17, 2024. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions StableVer.md
    Original file line number Diff line number Diff line change
    @@ -33,8 +33,8 @@ warning.
    **Beta** features _may_ experience breaking changes, but the goal is for them to
    stabilize, and so such breakage will be accompanied by guidance.

    **Deprecated** features will be _removed_ in the next major version release.
    Warning and a migration plan will be provided.
    **Deprecated** features are previously _beta_ or _stable_ features that will be
    _removed_ in the next major version release. Warning and a migration plan will be provided.

    **Internal** features are also subject to breaking changes at anytime. They
    differ from _alpha_ features in that they are not expected to stabilize.
  7. brandonbloom revised this gist Mar 17, 2024. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion StableVer.md
    Original file line number Diff line number Diff line change
    @@ -57,4 +57,7 @@ _internal_.

    Non-breaking bug fixes and _unstable_ features may be added or modified in any minor version
    release. Bug fixes may introduce breaking changes within the _undefined_ portion of _stable_
    features, but should be accompanied by guidance.
    features, but should be accompanied by guidance.

    Major version bumps _may_ be used for marketing purposes, even if there are no new deprecations
    or feature removals.
  8. brandonbloom revised this gist Mar 17, 2024. 1 changed file with 11 additions and 2 deletions.
    13 changes: 11 additions & 2 deletions StableVer.md
    Original file line number Diff line number Diff line change
    @@ -24,8 +24,8 @@ of individual APIs, data formats, and other features.
    Functionality can be either **stable** or **unstable**. Stable features are not
    subject to breaking changes, even in major version upgrades.

    Unstable features fall in to four categories: **alpha**, **beta**,
    **deprecated**, and **internal**.
    Unstable features fall in to five categories: **alpha**, **beta**,
    **deprecated**, **internal**, and **undefined**.

    **Alpha** features are subject to breaking changes at anytime and without
    warning.
    @@ -39,6 +39,11 @@ Warning and a migration plan will be provided.
    **Internal** features are also subject to breaking changes at anytime. They
    differ from _alpha_ features in that they are not expected to stabilize.

    **Undefined** behavior of features is the subset of functionality of any feature
    -- include _stable_ features -- that has not been adequately documented. Undefined
    behavior is treated as _internal_ for unstable features, and as _beta_ when associated
    with otherwise _stable_ features.

    ## Version Numbering

    When the major version is 0, it is called the "alpha release". All features are
    @@ -49,3 +54,7 @@ at best.
    For major version 1 and up, all _documented_ features are considered _stable_,
    unless otherwise indicated. All _undocumented_ functionality is considered
    _internal_.

    Non-breaking bug fixes and _unstable_ features may be added or modified in any minor version
    release. Bug fixes may introduce breaking changes within the _undefined_ portion of _stable_
    features, but should be accompanied by guidance.
  9. brandonbloom renamed this gist Mar 17, 2024. 1 changed file with 16 additions and 3 deletions.
    19 changes: 16 additions & 3 deletions versioning.md → StableVer.md
    Original file line number Diff line number Diff line change
    @@ -1,12 +1,25 @@
    # Versioning
    # StableVer

    This project uses `$SOME_CUTE_VERSIONING_SCHEME_NAME`. It works like this:
    This document describes the "StableVer" versioning scheme. Like SemVer and related schemes,
    major version numbers convey semantic information about breaking changes. Unlike SemVer,
    StableVer discourages breaking changes by adding semantics regarding feature stability,
    deprecation, and migrations.

    Version numbers have the short form:

    `<major>.<minor>`

    ## Stability
    Breakings may only be introduced in major version bumps. However, no breaking change
    may be made to a feature unless it was declared deprecated in the _previous_ major version bump.

    A key property of projects that use StableVer is that it should always be possible to
    migrate from major version N to major version N+1 without breakign changes -- provided that
    you are not using any features that were marked deprecated in version N.

    ## Stability Status

    Projects using StableVer are responsible for communicating the stability status
    of individual APIs, data formats, and other features.

    Functionality can be either **stable** or **unstable**. Stable features are not
    subject to breaking changes, even in major version upgrades.
  10. brandonbloom revised this gist Feb 21, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion versioning.md
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ Functionality can be either **stable** or **unstable**. Stable features are not
    subject to breaking changes, even in major version upgrades.

    Unstable features fall in to four categories: **alpha**, **beta**,
    **internal**, and **deprecated**.
    **deprecated**, and **internal**.

    **Alpha** features are subject to breaking changes at anytime and without
    warning.
  11. brandonbloom revised this gist Feb 21, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion versioning.md
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@ Functionality can be either **stable** or **unstable**. Stable features are not
    subject to breaking changes, even in major version upgrades.

    Unstable features fall in to four categories: **alpha**, **beta**,
    **internal**, and **"deprecated"**.
    **internal**, and **deprecated**.

    **Alpha** features are subject to breaking changes at anytime and without
    warning.
  12. brandonbloom revised this gist Feb 21, 2021. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions versioning.md
    Original file line number Diff line number Diff line change
    @@ -4,9 +4,7 @@ This project uses `$SOME_CUTE_VERSIONING_SCHEME_NAME`. It works like this:

    Version numbers have the short form:

    ```
    <major>.<minor>
    ```
    `<major>.<minor>`

    ## Stability

  13. brandonbloom created this gist Feb 21, 2021.
    40 changes: 40 additions & 0 deletions versioning.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,40 @@
    # Versioning

    This project uses `$SOME_CUTE_VERSIONING_SCHEME_NAME`. It works like this:

    Version numbers have the short form:

    ```
    <major>.<minor>
    ```

    ## Stability

    Functionality can be either **stable** or **unstable**. Stable features are not
    subject to breaking changes, even in major version upgrades.

    Unstable features fall in to four categories: **alpha**, **beta**,
    **internal**, and **"deprecated"**.

    **Alpha** features are subject to breaking changes at anytime and without
    warning.

    **Beta** features _may_ experience breaking changes, but the goal is for them to
    stabilize, and so such breakage will be accompanied by guidance.

    **Deprecated** features will be _removed_ in the next major version release.
    Warning and a migration plan will be provided.

    **Internal** features are also subject to breaking changes at anytime. They
    differ from _alpha_ features in that they are not expected to stabilize.

    ## Version Numbering

    When the major version is 0, it is called the "alpha release". All features are
    considered _alpha_, unless explicitly declared otherwise. Even if designated
    _stable_, functionality in an alpha release should should be treated as _beta_
    at best.

    For major version 1 and up, all _documented_ features are considered _stable_,
    unless otherwise indicated. All _undocumented_ functionality is considered
    _internal_.