[{"data":1,"prerenderedAt":162},["ShallowReactive",2],{"term-b\u002Fbackward-compatibility":3,"related-b\u002Fbackward-compatibility":144},{"id":4,"title":5,"acronym":6,"body":7,"category":125,"description":126,"difficulty":127,"extension":128,"letter":129,"meta":130,"navigation":131,"path":132,"related":133,"seo":138,"sitemap":139,"stem":142,"subcategory":6,"__hash__":143},"terms\u002Fterms\u002Fb\u002Fbackward-compatibility.md","Backward Compatibility",null,{"type":8,"value":9,"toc":119},"minimark",[10,15,19,23,26,30,108,112,115],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 - The Vibe Check",[16,17,18],"p",{},"Backward compatibility means the new version of your thing still works with the old stuff that depends on it, old API calls still succeed, old file formats still open, old client apps don't suddenly break. Break it without warning and you turn a routine update into an outage for every single person who didn't get the memo that things changed.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Backward compatibility is the property of a system, API, or file format where new versions continue to support inputs, calls, or data created for older versions, without requiring consumers to change their code. It is a core consideration in API versioning and semantic versioning, where a breaking change, such as removing a field or altering behavior, requires a major version bump precisely because it forfeits backward compatibility.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F backward compatible: old callers still work, new field is optional\ninterface UserV2 {\n  id: string\n  email: string\n  displayName?: string \u002F\u002F added in v2, safe because it's optional\n}\n","typescript","",[38,39,40,49,64,77,87,102],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F backward compatible: old callers still work, new field is optional\n",[41,50,52,56,60],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","interface",[41,57,59],{"class":58},"sBMFI"," UserV2",[41,61,63],{"class":62},"sMK4o"," {\n",[41,65,67,71,74],{"class":43,"line":66},3,[41,68,70],{"class":69},"swJcz","  id",[41,72,73],{"class":62},":",[41,75,76],{"class":58}," string\n",[41,78,80,83,85],{"class":43,"line":79},4,[41,81,82],{"class":69},"  email",[41,84,73],{"class":62},[41,86,76],{"class":58},[41,88,90,93,96,99],{"class":43,"line":89},5,[41,91,92],{"class":69},"  displayName",[41,94,95],{"class":62},"?:",[41,97,98],{"class":58}," string",[41,100,101],{"class":47}," \u002F\u002F added in v2, safe because it's optional\n",[41,103,105],{"class":43,"line":104},6,[41,106,107],{"class":62},"}\n",[11,109,111],{"id":110},"when-youll-hear-this","When You'll Hear This",[16,113,114],{},"\"We can add fields to the response, that's backward compatible, just don't remove any.\" \u002F \"Breaking backward compatibility on a public API without a deprecation window is how you make enemies.\"",[116,117,118],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":120},[121,122,123,124],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":110,"depth":51,"text":111},"general","Backward compatibility means the new version of your thing still works with the old stuff that depends on it, old API calls still succeed, old file formats...","intermediate","md","b",{},true,"\u002Fterms\u002Fb\u002Fbackward-compatibility",[134,135,136,137],"Semantic Versioning","Breaking Change","API Versioning","Contract Testing",{"title":5,"description":126},{"changefreq":140,"priority":141},"weekly",0.7,"terms\u002Fb\u002Fbackward-compatibility","FFU1DFIhRM-1COollKVK4EYPveahvYO6Z5r8HHc9hr4",[145,149,154,158],{"title":136,"path":146,"acronym":6,"category":147,"difficulty":127,"description":148},"\u002Fterms\u002Fa\u002Fapi-versioning","backend","API versioning is how you update your API without breaking everyone's apps.",{"title":135,"path":150,"acronym":6,"category":151,"difficulty":152,"description":153},"\u002Fterms\u002Fb\u002Fbreaking-change","cicd","beginner","A Breaking Change is a modification to your API or library that will BREAK existing code that uses it.",{"title":137,"path":155,"acronym":6,"category":156,"difficulty":127,"description":157},"\u002Fterms\u002Fc\u002Fcontract-testing","testing","Contract testing verifies that two services agree on their API contract — the request format, response shape, and status codes. It's like checking that the",{"title":134,"path":159,"acronym":160,"category":125,"difficulty":152,"description":161},"\u002Fterms\u002Fs\u002Fsemantic-versioning","SemVer","Semantic versioning uses three numbers — MAJOR.MINOR.PATCH — where each number means something. PATCH (1.0.1) = bug fix. MINOR (1.1.",1792528064760]