Building from Source

Requirements

  • Rust toolchain supporting edition 2024
  • A C toolchain for the native dependencies pulled in by the GUI stack

Build

git clone <repo>
cd ue3-tools
cargo build --release

Binary at target/release/ue3-tools.

For iteration, cargo run -- <args> works normally:

cargo run -- --game-root /path/to/game list Interface.upk

Cross-compiling for Windows

The tree carries build artifacts for x86_64-pc-windows-msvc and x86_64-pc-windows-gnullvm, so both targets are known to work:

rustup target add x86_64-pc-windows-gnullvm
cargo build --release --target x86_64-pc-windows-gnullvm

Dependencies

Crate Used for
byteorder every binary read and write
clap (derive) CLI parsing
lzo1x package chunk decompression
serde, ron serialization of package tables
bitflags package flag sets
eframe, egui_extras, rfd the GUI inspector and its file dialogs
rusttype glyph rasterization for create-font
flate2, anyhow, toml, libc declared for planned work

The GUI is the heavy part of the build

eframe pulls in the whole windowing and GL stack. If you only need the CLI, that's the first thing to put behind a feature gate.

Layout

src/
├── main.rs              CLI dispatch
├── upkreader.rs         package format + extraction driver
├── upkpacker.rs         .uo → override blobs
├── upkprops.rs          property decoding and encoding
├── pseudo.rs            .uo emitter
├── pseudo_parse.rs      .uo parser
├── schema.rs            metatype deserializers
├── schemadb.rs          lazy import-graph type database
├── versions.rs          all VER_* / PKG_* / FUNC_* / CPF_* constants
├── ui.rs                egui inspector
├── native/              per-class asset serializers
├── types/font.rs        TrueType → UE3 font generation
└── utils/               decompression, DDS

Reference material

Development is checked against the UE3 source trees for the surrounding versions — the 2011 drop is the most useful, with 2008 and 2013 for bracketing a layout change. Core/ and Engine/ supply the authoritative serialization order; the UnrealEd sources are worth reading when working out what an object's fields actually mean.