Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Unreal.hx is a plugin for Unreal Engine 4 that allows you to write code in the Haxe programming language. Haxe is a modern, high-level, type-safe programming language that offers high performance critical for game development.

Main Features

  • Haxe compiles directly to C++, for high runtime performance.
  • Full access to the entire Unreal C++ API - including delegates and lambdas.
  • Full support for UCLASS creation, subclassing, and Blueprints.
  • Very fast compilation using hxcpp's virtual machine, cppia

Haxe Features

  • Familiar C/Java-style syntax.
  • Memory management via garbage collection.
  • Strict type safety, with a powerful type inference engine.
  • Many modern features such as lambdas/closures, generics, abstract data types (GADT's), reflection, metadata, and a powerful macro system for language extension.


  • Make sure you've got a working haxe installation, and have the hxcpp and hxcs haxelibs installed
  • Clone this library or add it as a submodule to your Unreal project in the Plugins/UnrealHx directory
  • Change your Build.cs file to extend HaxeModuleRules instead of ModuleRules
  • Build your project the same way you'd build it before
  • A new directory, Haxe, will be created at the root of your project. Add any class to be compiled to Haxe/Static or Haxe/Scripts, and you may add new compiler arguments to the arguments.hxml file
  • After the first build, you may call haxe gen-build-script.hxml inside the Haxe directory to compile the Scripts without having to do a full C++ build (see our wiki)
  • For the latest development, Haxe 3.4.x, 4.0.0-preview1 are supported, and Unreal version 4.19 is supported


package mygame;
import unreal.*;

class AMyActor extends AActor {
  // make a property that is editable in the editor.
  @:uproperty(EditDefaultsOnly, Category=Inventory)
  var items:TArray<AActor>;

  // make a function that is callable from C++/Blueprints
  @:ufunction(BlueprintCallable, Category=Inventory)
  public function addToInventory(item:AActor) {

  // override native C++ function
  override function Tick(deltaTime:Float32) : Void {
    super.Tick(deltaTime); // call super functions
    trace('Hello, World!'); // all traces are redirected to Unreal's Log
    trace('Warning', 'Some Warning'); // and it supports Warning, Error and Fatal as well

  // tell Unreal to call our Tick function
  public function new(wrapped) {
    this.PrimaryActorTick.bCanEverTick = true;
package mygame;
import unreal.*;

class AMyGameMode extends AGameMode {
  public var playerName:FString;

  public function makeExternalRequest(data:String) {
    // use Unreal C++ API to make an HTTP Request
    var httpRequest = FHttpModule.Get().CreateRequest();
    httpRequest.SetHeader("Content-Type", "application/json");

    // use Haxe JSON library to encode data.
    var json = {
      name: this.playerName,
      playerData: data,

    // Receive a callback when the response is received.
    httpRequest.OnProcessRequestComplete.BindLambda(function (request, response, success) {
      trace('response received: ${response.GetContentAsString()}');


For a complete example project, check out , which is a port of Unreal's Platformer Game demo to Haxe 3.3/Unreal 4.11

More information is available on the Wiki


Unreal.hx: Haxe Integration for Unreal







No packages published