Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

azerite

Ports of WoW (World of Warcraft) addon serialization formats from Lua to JavaScript, Python, and Ruby.

Decode and re-encode export strings from WeakAuras, ElvUI, Plater, MDT, VuhDo, Cell, BigWigs, GSE, TotalRP3, DBM, and more.

Packages

Language Package Install Docs
JavaScript azerite npm install azerite js/README.md
Ruby azerite gem install azerite ruby/README.md
Python azerite pip install azerite python/README.md

Quick start

const { Pipeline } = require('azerite');
const result = Pipeline.decode('!WA:2!nZ...');
// result.data, result.addon, result.steps
Pipeline.encode(result);
require "azerite"
result = Pipeline.decode("!WA:2!nZ...")
Pipeline.encode(result)
from azerite import Pipeline
result = Pipeline.decode("!WA:2!nZ...")
Pipeline.encode(result)

Supported addons

Addon Prefix Encoding Compression Serializer
WeakAuras v2 !WA:2! EncodeForPrint zlib LibSerialize
WeakAuras v1 ! EncodeForPrint zlib AceSerializer
ElvUI !E1! EncodeForPrint zlib AceSerializer
Plater v2 !PLATER:2! base64 zlib CBOR
Cell !CELL:*:*! EncodeForPrint zlib LibSerialize
MDT ! or none EncodeForPrint zlib or LibCompress AceSerializer
TotalRP3 ! EncodeForPrint zlib AceSerializer
BigWigs BW2: base64 zlib CBOR
GSE !GSE3! base64 zlib CBOR
VuhDo none base64 LibCompress VuhDo custom
DBM none EncodeForPrint zlib LibSerialize

The pipeline auto-detects the addon format from the prefix and data characteristics. See FORMATS.md for full details.

Libraries

Each language has parallel implementations of:

Module Description
Pipeline Orchestrates decode/encode with per-addon step sequences and heuristic auto-detection
LuaDeflate WoW's custom 64-character encoding (not standard base64)
AceSerializer Type-prefixed text serialization (^S string, ^N number, ^T table, etc.)
LibSerialize Binary serialization with type codes and back-references
LibCompress Huffman + LZW decompression (clean-room port)
WowCbor CBOR wrapper for Plater/BigWigs/GSE
VuhDoSerializer VuhDo's custom type-length-value format

Tests

make install  # install dependencies for all languages
make test     # run all test suites

Or individually:

make test-js      # Node.js (node --test)
make test-ruby    # RSpec
make test-python  # pytest
make test-lua     # busted (Lua reference tests)

Tests are generated from a shared YAML manifest (testing/tests.yaml) using Jinja2 templates, ensuring identical coverage across all languages.

make generate-tests  # regenerate test files from templates

Project structure

js/              JavaScript package (CommonJS)
ruby/            Ruby gem (lib/azerite/)
python/          Python package (azerite/)
lua/             Lua reference implementations + test suite
testing/         Test code generator, YAML manifest, and Jinja2 templates

Protocol docs

  • PROTOCOL.md -- AceSerializer and LuaDeflate wire format specification
  • FORMATS.md -- Per-addon export format documentation

Credits

From-scratch implementations of the wire formats used by these WoW Lua libraries:

License

ISC

About

Ports of common wow serialisation/deserialisation libraries

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages