Native module guides
The Native reference groups three module guides by responsibility. Keep their owners and data types separate when following an example.
| Module | Start here | Boundary to preserve |
|---|---|---|
| BigWorld | Runtime and callbacks, entities and spaces, models and loading | Engine objects and delayed work need an owning client context. |
| ResMgr | Virtual paths and DataSection readers | An opened resource is separate from parsed application data and a ready view. |
| GUI | Component roots, resetters and coordinate modes | Native component ownership is separate from Scaleform and Gameface view ownership. |
Explore Game Behavior & Mechanics for explanations of vehicle stats, reload cycles, visibility, mode rules, progression and replay behavior, with links to the supporting game files.
World of Tanks client development
Build mods that are easier to understand, maintain, and update.
Follow step-by-step Python modding tutorials, then explore safe hooks, events, Gameface overlays, BigWorld APIs, packaging, debugging, and client update migration.
What are you building?
Choose a visible result, follow a complete example, then use the linked reference to understand its ownership and limits. Check each tutorial's compatibility note before adapting it to your client.
Show information in battle
Build a Gameface battle panel, then explore view readiness and cleanup.
React to garage vehicle changes
Build a selection notifier, then check garage ownership and readiness.
Save configurable settings
Build a configurable greeting, then use settings and storage guidance.
Track battle state
Build a battle session counter, then follow arena state and lifecycle.
Connect a local companion tool
Build a local snapshot bridge, then review thread and bridge boundaries.
Extend an existing method safely
Adapt the wrapper recipe, then check composition and teardown rules.
New to client modding? Follow this path
You do not need to understand the whole client before starting. Complete these four stages, then use the rest of the site as a reference.
Plan one visible feature
Define what changes, when it runs, and who cleans it up.
Load a minimal mod
Learn the package path, loader lifecycle, compilation, and safe wrappers.
Follow the production tutorials
Build complete mods across ten levels, with source research, annotated code, testing, diagnostics, and maintenance at every level.
Make builds repeatable
Create a clean workspace and verify the final .wotmod archive.
How the layers fit together
Gameface · Wulf · Scaleform
callbacks · entities · camera · resources
Core principles
Lifecycle before behavior
Import means the file was discovered. It does not mean the account, battle, cache, dependency container, or UI is ready.
State has a scope
Account, arena, vehicle entity, vehicle type, inventory item, and view instance are different identities.
Async results can go stale
Carry context with every delayed result and reject it when the player, arena, vehicle, or view changed.
Cleanup is part of the feature
Callbacks, event handlers, windows, GUI roots, observers, workers, and patches all need an explicit owner and exit path.
Recommended reading order
Build the smallest viable feature
Define the target, runtime scope, ownership boundaries, and failure behavior.
Load and patch one feature safely
Understand package paths, loader lifecycle, composable wrappers, engine callbacks, compilation, and update resilience.
Learn by building complete mods
The Level 1–10 series begins with configuration and garage state, introduces battle and Gameface systems, then advances through persistence, local integration, analytics, and replay-safe data engineering. Every level carries the feature through investigation, implementation, packaging, testing, diagnosis, and update maintenance.
Set up the tooling and package the mod
Build a reproducible workspace, locate and extract resources, validate the archive root, and test the packaged mod after updates.
Build a loader-safe single file
Keep each mod in one mod_*.py file with clearly ordered constants, state,
helpers, hooks, lifecycle handlers, and teardown.
Anchor it to real readiness
Use account, avatar, cache, view, and arena events instead of timing guesses.
Install hooks that compose
Capture the current callable, preserve behavior, mark ownership, and restore only your wrapper.
Choose the correct identifiers
Separate persistent vehicle type state from per-battle entity and view state.
Choose a rendering system
Use the smallest UI technology that fits the feature and its input needs.
Understand the game systems
Move beyond isolated hooks by learning which subsystem owns the data, when it becomes ready, and which identifiers remain valid.
Game Systems overview
Use the client system map and choose the correct chapter.
Client Architecture
Separate account, avatar, arena, entity, and GUI contexts.
Vehicles & Items
Understand descriptors, inventory objects, entities, and results.
Battle & Arena
Follow participants, periods, controllers, and live state.
Gameface Modding
Build injected native extensions and standalone modern overlays with correct models, sizing, scaling, input, and lifecycle ownership.
Typical architecture
A robust mod can stay in one source file when its constants, state, helpers, hooks, lifecycle handlers, and cleanup are kept in a deliberate order.
_started = False
_callback_id = None
_context_token = 0
def init():
global _started
if _started:
return
_started = True
subscribe_lifecycle()
install_hooks()
def start_context():
global _context_token
_context_token += 1
create_owned_state(_context_token)
def stop_context():
global _context_token
_context_token += 1 # invalidates delayed work
cancel_callbacks()
destroy_owned_state()
def fini():
global _started
if not _started:
return
stop_context()
restore_owned_hooks()
unsubscribe_lifecycle()
_started = False
Release checklist
- Initialization is idempotent and does not rely on import order.
- Every callback, event, hook, worker, input handler, and view has a teardown path.
- Slow work runs outside the game thread and returns through the engine callback bridge.
- Configuration is validated, backward compatible, and written safely.
- Optional features fail independently rather than preventing the whole mod from loading.
- Logs provide context without exposing tokens, endpoints, or high-frequency noise.
Advanced system guides
Native actions
Build synchronized server-changing flows without duplicate requests or misleading success messages.
Battle data
Choose authoritative event layers, preserve baselines, and reconcile final results.
Gameface models
Work with native projections, placeholders, composite roots, and host update contracts.
Local tools
Bridge loopback tools and background threads to the game client safely.
Spatial coordinates
Convert between world, arena, minimap, and UI spaces without mixing ownership.
Mode identifiers
Keep GUI type, bonus type, queue type, and mode tags in the right namespace.
Development workflow
The guide now includes a practical path from source file to a verified local archive: environment
checks, ownership discovery, package extraction, asset staging, deterministic
.wotmod builds, and post-update verification.
Expanded engineering references
The guide now includes dedicated references for Python 2.7 behavior, multi-mod compatibility, update testing, source navigation, native BigWorld helpers, and the historical API.
Detailed contract reference
Gameface communication
Follow initial state, commands, revisions and DOM application.
Battle state and feedback
Separate reported state, controller caches and historical events.
Vehicle calculations
Preserve setup authority, copy ownership and units.
Results and accounting
Handle revisions, totals, scenarios and signed costs.
Native async lifetimes
Own continuations, cancellation, scopes and worker results.