Releases: Eyal-WowHub/WowSync
Releases · Eyal-WowHub/WowSync
Release list
1.0.0-beta.208
WowSync
1.0.0-beta.208 (2026-06-30)
Full Changelog Previous Releases
- refactor: regroup core and internal helper folders
Rename Infrastructure to Core so the addon's foundational pieces live
under a clearer name, and move the shared utilities that used to sit in
Core into Libs/Internal where private helper modules belong. The toc
load order is updated to match, and Libs/Internal is un-ignored so the
helpers stay tracked.
Also decouple Colorizer from the addon's accent color: it now exposes a
generic Wrap(color, text) and the caller supplies the color, removing a
hidden dependency on a global constant. - fix(snapshots): enable exact mode for action bars
ActionBars now advertises both Merge and Exact apply modes.
This lets the apply preview expose the per-module mode toggle for
ActionBars while keeping its default row mode on Exact.
Update the SnapshotApplyMode examples to point at Talents as the
additive-only module instead of ActionBars. - feat(funding): add Ko-fi funding link
1.0.0-beta.180
WowSync
1.0.0-beta.180 (2026-06-29)
Full Changelog Previous Releases
- docs: update warning message in README to reflect beta status and usage caution
- chore(release): automate CF/Wago publishing
Add a tag-triggered GitHub Actions workflow with BigWigs packager.
Publishes tagged builds to CurseForge and Wago from the WowSync repo.
Add X-Curse-Project-ID and X-Wago-ID to WowSync.toc for routing.
Supports annotated 1.0.0-beta.X release tags. - docs: update screenshot for WowSync window in README
- perf(hash): avoid per-leaf concat allocations
Replace the leaf serializer's type:value string concatenation with
three direct part pushes (type, colon, value text).
This preserves the canonical serialized output and resulting hashes
while reducing intermediate string allocations during fingerprinting. - fix(snapshots): diff other heads vs live setup
Previewing another character's head wrongly compared against that
profile's latest saved snapshot, returning nil and showing nothing when
the character had no snapshot yet.
Route a non-current head through PreviewApplyHeadByCharKey so it diffs
that character's stored setup against the logged-in character's live
state. The own head keeps its unsaved-changes-vs-latest behaviour. - docs(screenshots): refresh UI screenshots
Update the Imports and Profiles screenshots to reflect the aligned
action buttons and add a new MainFrame capture for the README.
Keeps the documented UI in sync with the current layout. - docs: overhaul readme and refresh screenshots
README now describes the current data model, where profiles are
timelines and snapshots hold the captured module data shown in Current
and history, and explains export/import sharing and PvP Talents support.
The main window screenshot is renamed to reflect the profiles view and a
new imports screenshot is added so the visuals match today's UI. - refactor(core): group runtime features together
Load-time behavior stays the same, but profile, snapshot, import, and
development capabilities are now treated as one feature area.
This clarifies the addon architecture so future work can evolve feature
logic without mixing it with infrastructure concerns. - fix(toc): update notes for clarity on profile sync functionality
- fix(snapshot): sync head preview to unsaved badge
Change SnapshotView:Preview for head handles to preview against the
latest saved snapshot instead of the stored head state.
This makes the Current row preview show unsaved deltas that match the
unsaved-changes badge, avoiding contradictory UI signals. - feat(snapshot-view): add selector accessor
Add SnapshotView:GetSelector(handle) to return hash#index for saved
snapshots and nil for character heads.
This gives UI export code a stable way to reference saved snapshots
without reading raw snapshot internals. - feat(imports): add snapshot share import/export
Add the import/export core for shared snapshot strings in WowSync.
Create class-locked import containers with lookup, rename/delete,
note updates, and duplicate warnings for imported snapshots.
Add manager APIs to encode/decode, import, preview, and apply imports.
Wire /ws export and /ws import to open the UI share dialog with
localized help text, and initialize import DB defaults and load order. - feat(actionbars): show icons for all action types
Resolve preview icons for macros, equipment sets, battle pets,
and flyouts alongside spells and items. When a texture cannot be
resolved on the current character, use the empty-slot icon instead
of a blank entry.
This keeps ActionBars diff rows visually consistent and makes changed
slots easier to identify at a glance, even when the referenced action
is not available locally. - refactor: split core and Infrastructure code
Startup layering now treats Core as foundational library code and
loads Infrastructure afterward. This aligns load order with the
refactor boundary so shared primitives are initialized before
infrastructure services and registries are attached.
Keeping the runtime bootstrap aligned with the architecture makes
future moves between layers safer and reduces accidental dependency
cycles during addon startup. - feat(diff): add one-line preview descriptions
Snapshot diff rows now include one-line context beneath each item
label, so users can understand what a change represents before
applying a sync. Add-on entries show addon notes, keybinding entries
show assigned keys, macro entries show the first meaningful macro
line, and settings entries show curated CVar descriptions.
The tracked CVar catalog is now defined as dedicated settings data
instead of living in branding constants. This keeps constants focused
on user-facing tunables and makes settings metadata easier to
maintain, with description text aligned to official wording. - feat(snapshot): add module default icons
Modules can now declare a default icon in Config so diff entries
without their own icon still render with a recognizable module
identity. This keeps preview output easier to scan while preserving
existing per-entry icons where modules already provide them.
The module contract now documents this capability, and snapshot access
now exposes module defaults for consumers that render previews. - refactor: reorder variables
- feat(undo): add core preview for rollback
Expose a read-only undo preview that returns the diff between the
current setup and the most recent rollback snapshot.
This gives UI flows a single source for showing pending undo changes
before the user confirms restoration. - feat(combat): gate snapshot actions in combat
Snapshot save, apply, undo, and delete commands now no-op during combat
lockdown and report a clear combat message instead of attempting the
action. This centralizes combat protection in the snapshot flow so
module behavior stays consistent and protected APIs are never touched
while locked. - feat(pvp): add dedicated talent sync module
Add a new PvpTalents module that captures active-spec PvP slots,
applies valid selections per slot, and emits icon-aware diff entries.
Remove PvP talent handling from Talents and wire module loading and
locale text so preview and apply reflect actual PvP talent changes. - feat(talents): show spec icon in diff preview
Include each flattened loadout's spec ID and resolve entry icons with
GetSpecializationInfoByID during talent diff generation.
This binds preview icons to the loadout specialization instead of
the player's current specialization state. - feat(core): add icon-aware diff preview entries
Diff results now carry preview entries with a label and optional icon
instead of label-only strings, so callers can render richer change lists
without recomputing metadata per module.
Action bar and macro diffs now provide native textures, while modules
without icons continue to emit label-only entries.
This keeps existing count-based consumers unchanged and updates the
module contract to match what the preview UI expects. - fix(screenshots): update MainFrame.png to reflect recent UI changes
- fix(actionbars): clarify unnamed macro fallback
Change the ActionBars macro fallback label from "Macro " to
"Unnamed macro".
Dynamic #showtooltip macros can expose a shown spell or item id,
not a macro index. Rendering "Macro 783" implied an index that
might not exist, which was misleading during debug and diff review. - fix(ModuleInterface): clarify ApplyPriority behavior in documentation
- fix(snapshots): apply modules in a deterministic priority order
Macros and Talents now apply before ActionBars and Keybindings so the
macros/spells they reference exist before being placed, preventing silent
loss of macro buttons on cross-character or exact applies. Modules declare
Config.ApplyPriority; SnapshotManager iterates them via
ModuleRegistry:IterableModulesByPriority. - fix(actionbars): capture macro names from the action slot
GetActionInfo's id is the shown spell/item for dynamic #showtooltip
macros, not the macro index, so GetMacroInfo couldn't name them and
exact-mode apply cleared them without re-placing. Read the name via
C_ActionBar.GetActionText instead, and skip placement when no name
was captured. - fix(chat): restore message groups and channels via chat frame methods
The ChatFrame_* globals used to restore a tab's message groups and
channels were removed in retail; use the ChatFrameMixin methods. - feat(commands): label unpackaged builds as Prerelease
Show "Prerelease" in /ws status when the addon version metadata is the
unsubstituted @Project-Version@ token, instead of leaking the raw token. - feat(commands): group /ws status output under prefixed headers
Add an unprefixed PrintLine and use it for /ws status detail lines so
the addon name prefixes only each section header, not every line. - docs(readme): sync slash command docs
Update the Slash Commands table to document/ws statusand/ws debug
using the same descriptions shown by/ws help.
Add a diagnost...