API changelog¶
What changed in the public plugin API, per EMS release. This is not the EMS changelog — the addon ships plenty that never touches your plugin, and that noise is exactly what makes a full changelog useless for this. Everything below either adds something you can call, changes what an existing call returns, or fixes a case where a call misbehaved.
Newest first. A release that isn't listed didn't change the API surface.
One release API_VERSION won't tell you about
From EMS 2.4.0, API_VERSION bumps on any addition to the surface, so
RequireVersion is a real gate again. One release predates that rule and is
still in the wild: EMS 2.3.7 added GetAuthoredSteps while the contract
stayed at 3, on the older "breaking changes only" policy. So
RequireVersion(3) answers yes on 2.3.0 and on 2.3.9 alike, and the
capability list can't separate them either — stepdata predates the method.
If you support 2.3.7, feature-detect the specific thing you need:
Reading a key the API doesn't have returns nil rather than raising, so the
check is safe on any build.
EMS 2.4.12 — 2026-09-03¶
Fixed¶
API:GetSequenceInfo(name)reportsactiveVersionIndexagain for a sequence that has a live version. 2.4.11 moved the type screen for the active version onto the engine's accessor, but this function kept hand-rolling its own position loop against the value it had screened locally. Once the two stopped agreeing, the field came backnilfor exactly the sequence whose in-game badge was showing V2 live. The position now comes from the engine, which reads the unscreened element deliberately: an array position stays knowable even when the element at it is malformed. Nothing else in the returned table changed. Anilcheck you added aroundactiveVersionIndexafter 2.4.11 is still correct and still worth keeping — a version that genuinely does not resolve returnsnilhere, as it always has.
EMS 2.4.11 — 2026-09-02¶
Fixed¶
API:GetSequenceInfo(name)stopped raising on a sequence whose active version is not a table, and stopped reporting a step count for one whosestepsfield is not a table either. The old code readstepFunctionoff whatever the version resolved to, so a number or a boolean there threw inside your call. A stringstepsfield failed more quietly: the length operator ran on the string, so a sequence holding"abcd"came back with anactiveStepCountof4. The resolved version is screened now, and three keys move with it on a corrupt sequence:stepFunctionandactiveVersionIndexarenil, andactiveStepCountis0.activeVersionIndexis the one to look at if you were relying on it, because it used to name the corrupt version's position rather than raising. A sequence with well formed data is unaffected, so this only ever changes a case that used to throw or hand back a count nothing authored.
EMS 2.4.0 — 2026-08-14¶
Added¶
API:GetActiveSequence()— the name of the sequence EMS most recently drove, ornilwhen none has been driven this session. A read-only string with no setter. It saves you mirroringSEQUENCE_STEP_ADVANCEDinto your own variable just to answer "which sequence?". Read the name literally: it is most recently driven, not currently running. The value is never cleared when a sequence stops, and hold-mode activation writes it just as a secure-button click does — so a non-nil result tells you what ran last, not that anything is running now. For live start/stop, stay onSEQUENCE_STEP_ADVANCED.authoredstepscapability id —GetAuthoredStepsnow has an id of its own. It previously sat understepdata, which predates it and therefore couldn't detect it.
Changed¶
API_VERSIONis now4, and the bump rule changed. The contract used to say it bumped only on a breaking change; in practice v2 and v3 both bumped on purely additive growth, and 2.3.7'sGetAuthoredStepswas the one addition that didn't. The rule now matches the practice: any addition to the surface bumpsAPI_VERSION. Nothing about an existing call changed, so no plugin needs edits — this makesRequireVersion(4)a reliable gate for everything listed above, and leaves 2.3.7 as the single build where a presence check is still the only option.
EMS 2.3.15 — 2026-07-29¶
Fixed¶
API:GetSequenceInfo(name)stopped raising on a sequence whose storedversionsfield is not a table. The old code handed that value straight toipairs, so the error surfaced inside your call instead of the function returning something you could check. A non-table now reads as an empty list: the call returns normally, withversionCountandcontextVersionCountboth0andactiveVersionIndexleftnil. A sequence with well formed data is unaffected, so this only ever changes a case that used to throw.
EMS 2.3.7 — 2026-07-11¶
Added¶
API:GetAuthoredSteps(name)— the active version's per-step spell data in authored base order, as{ index, spellID, spellName, icon }. This is the order the user wrote, before the step function expands it and before interleave copies land. Use it when you want per-spell frequency or the base order; keep usingGetSequenceStepsfor anything that has to line up with the live step.
Changed¶
-
SEQUENCE_STEP_ADVANCEDnow reports the expandednumSteps. It previously fired the authored count while the button cycled the expanded array, so a 4-step Priority sequence advanced through steps 1..10 while the event told younumSteps = 4. It now fires10, andnumStepsmatches#GetSequenceSteps(name)for the same sequence.This one can break a working plugin
If you drew a progress readout from this payload, it was wrong before and is right now — no change needed. But if you compensated for the old mismatch (recomputing the real count yourself, or scaling the step index against it), that workaround now double-counts. Drop the compensation. Sequential and Random sequences are unaffected: expanded and authored are the same array there, so those never disagreed.
-
GetSequenceList()[i].stepCountnow sits in the execution domain for dormant sequences too. A registered-but-not-activated sequence reported the compiled count while#GetSequenceSteps(name)reported the expanded one — the same 4-vs-10 split, reachable throughGetSequenceListbecause it iterates dormant entries.stepCountnow always equals#GetSequenceSteps(name)and is a valid denominator forcurrentStep, which is what the data reference always claimed.
EMS 2.3.4 — 2026-07-03¶
Added¶
GetSequenceInfogained five metadata fields:help,helplink,changelog,talentString, andurl. All scalar copies, allnilwhen the author didn't set them.talentStringcarries a sequence's talent loadout string, which survives import, save, re-export, and duplication — so a plugin can offer "load this build" next to a rotation without asking the user to paste anything.
EMS 2.3.1 — 2026-06-30¶
Fixed¶
GetSequenceList()andSEQUENCE_STEP_ADVANCEDno longer error on a version with no steps. Three accessors checked that the version table existed but not that itsstepsfield did, so an empty version raisedattempt to get length of a nil valueon the length operator. They short-circuit to0now.
EMS 2.3.0 — 2026-06-30¶
Added¶
API_VERSION3, with thestepdata,macro, andslashcapabilities. This is the action-bar surface:GetSequenceStepsandGetSequenceMacroIndexto read,handle:EnsureSequenceMacroandhandle:RegisterSlashCommandto author. See the action-bar plugin guide.
Getting notified¶
New entries here are posted to the plugin-dev channel on Discord when they ship, so you don't have to poll this page.
If you'd rather not sit in Discord, watch the docs repo — Watch → Custom → Releases. Every API change here gets a matching release, and GitHub will mail you.
Something missing?¶
If a release changed behaviour your plugin depends on and it isn't written down here, that's a bug in this page — open an issue and it gets added.