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.
| 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 |
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)| 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.
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 |
make install # install dependencies for all languages
make test # run all test suitesOr 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 templatesjs/ 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.md -- AceSerializer and LuaDeflate wire format specification
- FORMATS.md -- Per-addon export format documentation
From-scratch implementations of the wire formats used by these WoW Lua libraries:
- LibDeflate by Haoqian He — EncodeForPrint encoding (zlib)
- AceSerializer-3.0 (Ace3) — type-prefixed text serialization (BSD)
- LibSerialize by Ross Nichols — binary serialization with back-references (MIT)
- LibCompress by jjsheets and Galmok — Huffman + LZW compression (GPL v2)
- VuhDo — custom type-length-value serialization (All Rights Reserved)
ISC