A skinnable immediate-mode GUI framework for Rust, reverse-engineered from the abandoned mid-2000s Haxial appearance system by Haxial Pty. Ltd. (Australia, circa 2001).
🚧 Under Active Development - This project is in early stages as we reverse engineer the original .hap file format from AppearanceEdit.exe.
haxial/
├── haxial-gui/ # Core GUI framework (immediate-mode API + widgets)
├── haxial-appearance/ # .hap file format parser/writer
├── haxial-windows/ # Windows (Win32/GDI) backend
├── haxial-unix/ # Unix/Linux (Wayland) backend
├── haxial-mac/ # macOS (Cocoa) backend
└── haxial-appearanceedit/ # Skin editor application
- ✅ Pascal string (length-prefixed) support
- ✅ FourCC (4-character code) identifier system
- ✅ Basic geometry primitives (Point, Rect, Size)
- ✅ Event system (mouse, keyboard)
- ✅ Platform backend trait
- ✅ Color and palette management
- ✅ Image storage (RGBA32 and indexed color)
- ✅ Pattern system with 9-slice caps
- 🔨 .hap file format parser (reverse engineering from binary)
- 🔨 Widget implementations (Button, Slider, ScrollBar, etc.)
- 🔨 Windows backend implementation
- 🔨 GUI layout system
- 📋 Unix/Wayland backend
- 📋 macOS/Cocoa backend
- 📋 AppearanceEdit application
- 📋 Full .hap read/write compatibility
- 📋 GUI builder application
The framework uses an immediate-mode API (inspired by egui) rather than the original retained-mode approach. This provides:
- Simpler state management
- Better fit for Rust's ownership model
- More modern developer experience
Unlike modern GPU-based GUI frameworks, Haxial uses native platform SDKs:
- Windows: Win32 API + GDI (matching the original mid-2000s implementation)
- Unix: Wayland protocol
- macOS: Cocoa + Core Graphics
This keeps the authentic mid-2000s desktop feel while being cross-platform.
The goal is complete read/write compatibility with original .hap (Haxial Appearance Pack) files, preserving the ability to use vintage skins.
From reverse engineering AppearanceEdit.exe, we've discovered:
- Length-prefixed (1 byte) strings
- Maximum 255 characters
- Used throughout the format
- 4-character ASCII codes for widget types and sections
- Example:
'TIKB'for tick/checkbox buttons - Used for efficient lookup and identification
- Button (normal, hilited, disabled, default, icon)
- Tick/Mutex buttons (checkboxes)
- Sliders with indicators and grips
- ScrollBars (horizontal/vertical, double arrows)
- Menus with patterns
- Text fields
9-slice scalable patterns with:
- Left/Right/Top/Bottom caps (corners/edges)
- Middle section must be exactly 1 pixel wide/tall
- Optional transparent color
- Validation rules for cap sizes
# Clone the repository
git clone https://github.com/yourusername/Haxial.git
cd Haxial
# Build all crates
cargo build
# Run tests
cargo test
# Run the appearance editor (once implemented)
cargo run --bin haxial-appearanceeditThis project uses a hybrid approach:
- Reverse Engineering (Ghidra): Analyze
AppearanceEdit.exeto understand the .hap format - Function Renaming: Systematically rename functions/variables in Ghidra as we understand them
- Implementation (Rust): Implement parsers and widgets based on discoveries
- Testing: Validate against original .hap files created in AppearanceEdit
We welcome contributions! Areas where help is needed:
- Reverse engineering the .hap file format (Ghidra analysis)
- Widget implementations
- Platform backend development
- Documentation
- Testing with original .hap files
LGPL-3.0-or-later
This allows the framework to be used in both open and closed-source applications, while ensuring improvements to the framework itself remain open.
- Original Haxial framework: Haxial Pty. Ltd. (Australia, ~2001)
- Reverse engineering and Rust implementation: Haxial Contributors (2026+)
This project reverse engineers an abandoned software package whose copyright has lapsed. The implementation is entirely new code written in Rust, informed by analysis of the binary executable. No original source code or assets are used.