[{"data":1,"prerenderedAt":27},["ShallowReactive",2],{"doc:en:plugins\u002Fversioning":3},{"title":4,"lede":5,"html":6,"headings":7},"Versions","How a plugin says which Escouade it is written for, what happens when either one changes, and how the store picks the version to offer.","\u003Ch2 id=\"the-plugin-s-version\">The plugin’s version\u003C\u002Fh2>\n\u003Cp>\u003Ccode class=\"key\">version\u003C\u002Fcode>, in the manifest, is three numbers (\u003Ccode class=\"key\">1.2.0\u003C\u002Fcode>, \u003Ccode class=\"key\">0.3.0-beta.1\u003C\u002Fcode>), the same as the version’s git tag (\u003Ccode class=\"key\">v1.2.0\u003C\u002Fcode>, or \u003Ccode>plugins\u002F&lt;folder&gt;\u002Fv1.2.0\u003C\u002Fcode> in a repository of several plugins). The store refuses a version that is not greater than the last one published; a published version is frozen, and its number never comes back.\u003C\u002Fp>\n\u003Ch2 id=\"for-which-escouade\">For which Escouade\u003C\u002Fh2>\n\u003Cp>\u003Ccode class=\"key\">escouade\u003C\u002Fcode> says three things:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode class=\"key\">api\u003C\u002Fcode>: the major version of the \u003Ca href=\"\u002Fen\u002Fdocs\u002Fplugins\u002Fapi\u002F\">protocol\u003C\u002Fa> the plugin speaks, \u003Ccode class=\"key\">&quot;1&quot;\u003C\u002Fcode>. Escouade serves version 1 today.\u003C\u002Fli>\n\u003Cli>\u003Ccode class=\"key\">min\u003C\u002Fcode>: the oldest Escouade it was tried with (\u003Ccode class=\"key\">2.1.0\u003C\u002Fcode>, or \u003Ccode class=\"key\">2.1\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Ccode class=\"key\">max\u003C\u002Fcode>, optional: the newest. \u003Ccode class=\"key\">2.4\u003C\u002Fcode> covers every 2.4.x.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Outside that range, or for another API, the plugin stays installed but disabled, and Escouade says why: “This plugin needs Escouade 2.3.0 or newer; you have 2.1.0. Update Escouade.”\u003C\u002Fp>\n\u003Ch2 id=\"what-does-not-break\">What does not break\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>An unknown field of the manifest is ignored\u003C\u002Fstrong>: a manifest written for a newer Escouade still loads, and the ignored fields are listed.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>An unknown method\u003C\u002Fstrong> answers the error \u003Ccode class=\"key\">-32601\u003C\u002Fcode>, both ways: a plugin that does not serve a call does not crash, and Escouade applies its default answer.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A new fact\u003C\u002Fstrong> is only sent to the plugin that asks for it in \u003Ccode class=\"key\">permissions.events\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"what-breaks\">What breaks\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Another version of the protocol\u003C\u002Fstrong>: at \u003Ccode class=\"key\">initialize\u003C\u002Fcode>, a plugin that does not speak Escouade’s is stopped, with the reason (“it speaks version 2 of the protocol; this Escouade speaks version 1”).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A manifest invalid\u003C\u002Fstrong> for this Escouade: it does not load, and the reason is told field by field.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"updates\">Updates\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Escouade\u003C\u002Fstrong> offers \u003Cstrong>the latest version it can run\u003C\u002Fstrong>: a version written for a newer Escouade is skipped, a version withdrawn by its author too. An update is offered, never installed on its own (see \u003Ca href=\"\u002Fen\u002Fdocs\u002Fplugins\u002Finstaller\u002F#updates\">installing a plugin\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>A version that asks for more\u003C\u002Fstrong> permissions asks for the user’s consent again.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>The plugins shipped with Escouade\u003C\u002Fstrong> have its version and change with it.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"withdrawing-a-version\">Withdrawing a version\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Its author\u003C\u002Fstrong> withdraws it from the store from their account: it is no longer offered, and those who have it keep it, marked “withdrawn by the author” (see \u003Ca href=\"\u002Fen\u002Fdocs\u002Fplugins\u002Fpublishing\u002F\">publishing on the store\u003C\u002Fa>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Escouade\u003C\u002Fstrong> can withdraw a dangerous version through its revocation list: it is then stopped and disabled for everyone, with the reason (see \u003Ca href=\"\u002Fen\u002Fdocs\u002Fplugins\u002Finstaller\u002F#withdrawn-by-escouade\">withdrawn by Escouade\u003C\u002Fa>).\u003C\u002Fli>\n\u003C\u002Ful>\n",[8,12,15,18,21,24],{"id":9,"text":10,"depth":11},"the-plugin-s-version","The plugin’s version",2,{"id":13,"text":14,"depth":11},"for-which-escouade","For which Escouade",{"id":16,"text":17,"depth":11},"what-does-not-break","What does not break",{"id":19,"text":20,"depth":11},"what-breaks","What breaks",{"id":22,"text":23,"depth":11},"updates","Updates",{"id":25,"text":26,"depth":11},"withdrawing-a-version","Withdrawing a version",1793889382488]