# What is Haxe? [Haxe](https://haxe.org) is an open source toolkit based on a modern, high level, strictly typed programming language, a cross-compiler, a complete cross-platform standard library and ways to access each platform's native capabilities. The Haxe compiler can output a number of source and binary files. As of Haxe 3.4.0-rc.1, the Haxe compiler can target JavaScript, Java, C#, C++, Python, PHP, Flash SWF, ActionScript 3, Lua, and Neko. %%LOGO%% # About this image This image ships a minimal Haxe toolkit: - the `haxe` compiler with its standard library - the `haxelib` library manager - the `neko` virtual machine # How to use this image The most straightforward way to use this image is to use a Haxe container as both the build and runtime environment. In your `Dockerfile`, writing something along the lines of the following will compile and run your project: ```dockerfile FROM %%IMAGE%%:3.4 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # install dependencies COPY *.hxml /usr/src/app/ RUN yes | haxelib install all # compile the project COPY . /usr/src/app RUN haxe build.hxml # run the output when the container starts CMD ["neko", "Main.n"] ``` Then, build and run the Docker image: ```console $ docker build -t my-haxe-app . $ docker run -it --rm --name my-running-app my-haxe-app ``` ## Using the onbuild variants There are `onbuild` variants that include multiple `ONBUILD` triggers to perform all of the steps in the above Dockerfile, except there is no `CMD` instruction for running the compilation output. Rewriting the above Dockerfile with `%%IMAGE%%:3.4-onbuild`, we will get: ```dockerfile FROM %%IMAGE%%:3.4-onbuild # run the output when the container starts CMD ["neko", "Main.n"] ``` The `onbuild` variants assume the main compilation hxml file is named `build.hxml`. To use another hxml file, set the `BUILD_HXML` build argument during build: ```console $ docker build -t my-haxe-app --build-arg BUILD_HXML=compile.hxml . ```