Bringing Azeroth to Rust.
A WotLK Classic 3.4.3 server emulator built for faithful behavior and a welcoming community.
Get started · Documentation · Roadmap · Contribute · Community
RustyCore is an active, full-port effort: a TrinityCore-style WotLK Classic server being rebuilt in Rust. The target is full behavioral parity with the 3.4.3 C++ reference, with packet formats, database behavior, gameplay rules, and runtime order checked against the source before they are treated as correct.
Parts of login and world entry work, and many systems are represented in the workspace. The live gameplay runtime is still under migration, so RustyCore is not a drop-in replacement or a claim of complete gameplay parity yet. The current state is dated and records the evidence behind each status claim.
The documentation map routes each question to its maintained source.
- Current state — implementation, evidence, and known boundaries.
- Server setup — requirements, configuration, and startup.
- Client setup — endpoints and the login/world-entry smoke path.
- Database bootstrap — schemas, TDB content, and migrations.
- Validation V2 — focused, final, and exhaustive checks.
- Live client debugging — authorized runtime evidence.
The port plan describes the full-parity work and its order. Use the current state for what has evidence today; historical roadmaps, percentages, and archived handoffs do not replace it.
| Area | Current target |
|---|---|
| Client | WotLK Classic 3.4.3.54261 |
| Rust | 1.98.0, pinned in rust-toolchain.toml |
| Protobuf compiler | 28.3, pinned in .protoc-version |
| Databases | MariaDB 10.6+ or MySQL 8.x; auth, characters, world, hotfixes |
| World data | Trinity/TDB-style content; expected TDB 343.24081, cache_id = 24081 |
| Manual testing | Extracted client data (dbc, db2, maps, vmaps, mmaps as needed) |
You will also need a local configuration and, for Battle.net authentication, TLS certificate material. Keep credentials, certificates, database URLs, and runtime configuration outside Git. The server setup guide and DB bootstrap guide cover the operator prerequisites.
Clone the integration branch and let rustup use the repository's pinned toolchain:
git clone https://github.com/alseif0x/rustycore.git
cd rustycore
git switch 3.4.3Install a protoc release matching .protoc-version (28.3), then point PROTOC at it.
Build the two server binaries with one Cargo job:
PROTOC=/path/to/protoc cargo build --locked --release -j1 \
-p bnet-server -p world-serverPrepare the four databases and required world data with the DB bootstrap guide.
Create private bnetserver.conf and worldserver.conf files, then set their database,
TLS, realm, and DataDir values. The root-level config names and .conf.d directories are
ignored by Git.
Start Battle.net first and the world server second, in separate terminals:
./target/release/bnet-server --config /absolute/path/to/bnetserver.conf
./target/release/world-server --config /absolute/path/to/worldserver.confThe usual local ports are:
| Service | Port |
|---|---|
| Battle.net RPC over TLS | 1119 |
| Battle.net REST | 8081 |
| World socket | 8085 |
| Instance socket | 8086 |
Check the client setup guide before connecting a client. The integrated smoke bot covers a narrow login and world-entry scenario; passing it does not establish full gameplay parity.
RustyCore is a Cargo workspace. These groups show where to start; the complete member list
lives in the root Cargo.toml.
| Area | Crates |
|---|---|
| Services | bnet-server, world-server, rustycore-db |
| Protocol and transport | wow-packet, wow-proto, wow-handler, wow-network, wow-session |
| World and gameplay | wow-world, wow-map, wow-entities, wow-data, wow-movement, wow-combat |
| Persistence and data | wow-database, wow-persistence, wow-config, wow-core |
| Extensions | wow-module-api, world-modules, wow-script, wow-scripts, wow-ai |
| Supporting libraries | wow-constants, wow-crypto, wow-chat, wow-loot, wow-instances, wow-social |
| Tools | capture-diff and the tools under tools/ |
RustyCore welcomes code, tests, packet evidence, documentation, issue reports, and thoughtful discussion. Start with CONTRIBUTING.md, then check the documentation map and current state before choosing a task. Gameplay and protocol work needs the relevant C++ source anchor or target-build capture so that the port preserves known behavior instead of guessing.
Questions, design conversations, and introductions are welcome on Discord. For a reproducible defect or a bounded improvement, open a GitHub issue. Please keep sensitive runtime details and credentials out of public issues.
The documentation site is published at alseif0x.github.io/rustycore.
RustyCore takes time: protocol research, C++ archaeology, Rust porting, database work, packet tests, client testing, and long debugging sessions. Donations are welcome if you want to support the time needed to keep the project moving.
| Network | Wallet |
|---|---|
| BTC | bc1qeggjcl5guwmqr0aa4emufyzyh7nu5rkfrytqy8 |
| ETH / BNB | 0xfec63e014e0bd36d77b094ff27f7e7f5d7ab67aa |
| Solana | 9ktt1zinmwwsZXGx9x1BM995FwbAfdNWe65v1mdPgDhn |
| XRP | rBVvKPrQAmd5uDZ89nDgz5HbSWVD6sTbg2 |
RustyCore is licensed under GPL-3.0-or-later (GNU GPL version 3 or any later version). See LICENSE for the complete license text and NOTICE for the project's license grant and attribution notices.
WoW protocol research and server behavior are based on the public work of the TrinityCore and MaNGOS communities.
World of Warcraft is owned by Blizzard Entertainment. This project is not affiliated with, endorsed by, or sponsored by Blizzard Entertainment.
