Hey, designing a file format or network protocol? Let me give you one tip that I keep hearing people call unnecessary, and I keep coming to projects and having to work around it:

Add a simple SemVer version number.

Somewhere right at the start of the file, in the first message, or included in every JSON endpoint's response.

Nothing fancy, just a major and minor number. If the major is bigger than your client's, tell the user to update. Remember to increment the minor with each change.

@uliwitness technically this isn't "semver", although I think this is a more coherent and consistent way to do versioning than what the actual semver spec says

The distinctions between bugfix, new feature and breaking change are too wooly. A bugfix might break something. A new feature might fix a bug, etc.

Having two numbers that simply mean "backwards compatible change" and "non backwards compatible change" is a lot easier to reason about

@uliwitness of course, it still doesn't help with the scenario where you inevitably make a backwards incompatible change without realizing, and ship it as a minor bump, but no versioning system can solve that