One codebase, and you can ship the exact same source to a native C++ desktop binary, a JavaScript bundle, an Android app, a JVM jar, a PHP file and a WebAssembly module. Haxe has done that since 2005 — and as of 2026-09-23 the compiler repo was still receiving commits at 6,939 stars. The hard part isn’t the technology. The hard part is that nobody can tell you what the difference is between Haxe, HashLink, Lime, OpenFL, HaxeFlixel and HaxeUI — or which of those six names you actually need to install.
This guide sorts that out with live repository data, the real install commands, and a blunt verdict on when this stack is the wrong answer entirely.
TL;DR — Quick Verdict
- Backend service, CLI tool, or a small binary that must run everywhere → plain Haxe on the
hlorcpptarget. You need nothing else. - A 2D game shipping to desktop, mobile, web and consoles → OpenFL 9.5.2 (2,157★) plus Lime for the platform layer, and HaxeFlixel (2,212★) on top if you want sprites, tilemaps and physics out of the box.
- Fast startup, tiny runtime, no C++ toolchain on the target machine → HashLink 1.16 (902★).
- A native desktop GUI with real OS widgets → HaxeUI Core (396★) with the
hxwidgetsbackend — that is the framework in the screenshot above. - You want a game engine with a visual editor, asset pipeline and a store of plugins → do not use this stack. Use Godot or Bevy, or read our open-source engine build-server comparison first.
The Whole Stack in One Table
| Project | Stars | Latest release | Last repo activity | License | What it actually is |
|---|---|---|---|---|---|
Haxe (HaxeFoundation/haxe) | 6,939 | 4.3.7 (2025-05-09) | 2026-09-23 | GPL-2.0+ compiler, MIT standard library | Compiler + standard library, 8+ output targets |
HashLink (HaxeFoundation/hashlink) | 902 | 1.16 (2026-08-03) | 2026-09-23 | MIT | Bytecode VM, JIT and native library layer |
OpenFL (openfl/openfl) | 2,157 | 9.5.2 (2026-05-13) | 2026-09-23 | MIT | Flash/AIR-style display, audio, input stack |
HaxeFlixel (HaxeFlixel/flixel) | 2,212 | tag-based releases | 2026-08-23 | MIT | Opinionated 2D game engine |
HaxeUI Core (haxeui/haxeui-core) | 396 | tag-based releases | 2026-08-26 | MIT | Cross-platform widget toolkit |
Every number above was pulled live from GitHub on 2026-09-24, not remembered from a blog post. That matters in this ecosystem, because half the Haxe tutorials you will find online were written for Haxe 3 and describe a toolchain that no longer exists.
Decision Matrix: Match Your Project to the Right Layer
| Your use case | Pick | Why |
|---|---|---|
| One binary that must run on Linux, macOS and Windows | Haxe + hl target | HashLink bytecode is small and starts instantly |
| Maximum CPU throughput | Haxe + cpp (hxcpp) | Compiles to native C++ through the platform toolchain |
| 2D game for desktop + mobile + web | OpenFL + Lime | Single project file, many platform backends |
| 2D game where you want less boilerplate | HaxeFlixel | Built on OpenFL, ships camera, sprites, tilemaps |
| Native desktop GUI app | HaxeUI + hxwidgets | Real GTK/Qt/Win32 widgets rather than a canvas |
| Quick scripting, no build step | haxe --interp or Arturo-style eval | Interpreted loop for small tools |
| A game engine with a visual editor | Not this stack | See the build-server guide linked above |
Haxe — The Compiler Everything Else Depends On
Haxe is the compiler. Its job is to take one statically typed language and emit something else: cpp, hl, js, jvm, python, php, neko, lua, wasm and more. The generator is not a transpiler that glues strings together — each target has a real backend that understands the platform’s type system, so Int becomes a 32-bit int where the platform can support it and a boxed value where it cannot.
Another property worth understanding: Haxe is not interpreted and it is not a thin wrapper around a runtime. Each backend is a real code generator, so the same haxe command line can produce a native binary, a bytecode file and a browser bundle from one source tree.

The practical consequence: you can share validation, math and protocol code across a JavaScript frontend, a native game and a PHP endpoint without rewriting it. That single property is what keeps the project alive in 2026.
Getting packages into a Haxe project goes through haxelib, which is also the package manager used by every framework in this article:
| |
The haxelib dev line is directly from the OpenFL repository README, and it is the command you will want the moment you need to patch a framework bug instead of waiting for a release.
Verdict: if you only need one of these six names, you probably need this one. Haxe is active, the release line (4.3.7) is stable, and the license split is friendly: GPL-2.0+ for the compiler itself, MIT for the standard library and runtimes.
OpenFL — The Flash Heritage That Refuses to Die
OpenFL describes itself as “an open source library for creative expression on the web, desktop, mobile and consoles. Inspired by the classic Flash and AIR APIs.” At 9.5.2 (2026-05-13) and 2,157 stars with commits landing on 2026-09-23, it is very much alive.
The design bet is deliberate: the display list, Sprite, Stage, BitmapData and event model will be immediately familiar to anyone who ever wrote ActionScript. If you have a decade of Flash muscle memory, you can be productive on day one. If you do not, the API names will feel like archaeology.
OpenFL sits on Lime, which owns the platform backends and the command-line tools. That is where the cross-platform promise is actually implemented:
| |
The same command family drives openfl test linux, openfl test android and the rest. Native extensions are supported through the standard Lime project format, and the README notes that OpenFL extensions are deliberately not AIR-compatible — they would rather have a simpler, composable extension format than bit-for-bit API emulation.
For a web-first project you can also skip haxelib entirely and use the npm generator:
| |
Verdict: the correct foundation for a 2D game or a rich display-driven app. Do not use it for forms and tables — that is a job for a widget toolkit.
HashLink — The Runtime That Makes Haxe Feel Fast
HashLink (902★, MIT, 1.16 released 2026-08-03) is a virtual machine and JIT built specifically for Haxe bytecode. When you compile to the hl target, you get a small file that starts immediately and runs without a native compilation step on the target machine — a genuine advantage when you are deploying to a fleet of machines you do not control.
You can also consume it as a library and embed a Haxe-powered interpreter inside a larger C program, which is the same architectural trick the Rebol family uses for embedding (see the Janet vs Fennel vs Hy comparison for the Lisp-flavoured version of that idea).
Building HashLink from source is a normal C project, and the dependency list is the honest signal of how much it does. On Ubuntu, straight from the repository README:
| |
That is image decoding, video decoding, audio output, OpenGL, TLS, async I/O and an embedded SQLite engine. Note what is not in the list: a C++ compiler toolchain per target platform, and a chain of framework SDKs. That is the whole point of choosing hl over cpp for a service or a tool.
Verdict: pick HashLink when deployment simplicity and startup time beat raw throughput. Pick cpp when you have measured and it matters.
HaxeUI — Native Widgets Without Rewriting the UI Five Times

HaxeUI Core (396★, MIT, active 2026-08-26) is the layer most people miss. It gives you a declarative UI toolkit where the same screen definition renders through different backends: OpenFL for games and web, hxwidgets for genuine native desktop widgets, and HTML for the browser.
The screenshot above is the component gallery running through the hxwidgets backend — tabs, sliders, progress bars, checkboxes and text fields rendered as real operating system controls, not as a canvas imitation. That distinction matters for accessibility, for system theme integration, and for anyone who has ever tried to make a canvas-based text field behave correctly with an input method editor.
Installation is two haxelib commands (one core, one backend), which is the same pattern for every backend in the project:
| |
Verdict: the only serious option in this stack if you are building a desktop application with forms, lists and dialogs. For pixel-perfect game UI, stay inside OpenFL.
HaxeFlixel — The Pragmatic Layer for 2D Games
HaxeFlixel (2,212★, MIT, last pushed 2026-08-23) is OpenFL with opinions: a state machine for screens, a sprite and animation system, tilemaps, a camera, particle effects and a debug console. It is powered by Haxe and OpenFL, which means every OpenFL extension works and every Lime platform target carries over.
The trade-off is inheritance. You accept HaxeFlixel’s world view — its state lifecycle, its update loop, its asset naming — and in exchange you skip several thousand lines of glue that you would otherwise write yourself.
Verdict: if you are making a 2D game and do not have a strong reason to build your own render pipeline, start here. If you want to compare against the JavaScript ecosystem before committing, our Phaser vs PixiJS vs Kaboom comparison is the equivalent decision made in JavaScript.
Pitfalls: What the Tutorials Do Not Tell You
haxelib libraries rot quietly. Unlike npm or PyPI, there is no deprecation noise. A library can sit untouched for four years and still install cleanly, then fail against a current compiler. Always check the last commit date in the repository before adopting a dependency — the star count is not a maintenance signal.
The target matrix is not free. cpp output requires a native toolchain for every platform you ship to. Cross-compiling to Windows from Linux is a project in itself. If ease of shipping outweighs peak performance, hl removes the entire class of problem.
Flash-era API names are a double-edged sword. OpenFL’s flash.display heritage means excellent documentation and instant familiarity for veterans, and a constant Google search for everyone else, because half the search results are ActionScript answers that do not apply.
Do not develop on cpp. Use the interpreted or hl target for the edit-run loop and only compile to native for release builds. Iteration speed is the single biggest productivity difference between a Haxe project that succeeds and one that gets abandoned.
Read the license split carefully before shipping. The compiler is GPL-2.0-or-later; the standard library and runtimes are MIT. Shipping compiled output is standard commercial practice across the ecosystem, but if you are modifying and redistributing a framework rather than using it, the MIT portions are what you want to check per-project.
Native desktop apps need the right backend. HaxeUI’s default OpenFL backend draws its own widgets. If you want system widgets, system fonts and system accessibility, install haxeui-hxwidgets explicitly — it is a separate haxelib, not a flag.
FAQ
Is Haxe still actively maintained in 2026?
Yes. The compiler repository (HaxeFoundation/haxe) showed activity on 2026-09-23 with 6,939 stars, and the companion runtime HashLink published 1.16 on 2026-08-03. The stable compiler release line is 4.3.7. OpenFL, HaxeFlixel and HaxeUI all showed commits within the last month.
What is the difference between Haxe, HashLink, Lime and OpenFL?
Haxe is the compiler that turns one source language into many target outputs. HashLink is a bytecode virtual machine that runs Haxe’s hl target. Lime owns platform backends and the command-line tools. OpenFL is the Flash-inspired display, audio and input library built on Lime. You install them as separate pieces and combine only the ones your project needs.
Do I need a C++ toolchain to build a Haxe game?
Not necessarily. The cpp target compiles through the platform’s native C++ toolchain, which is what you want for a release build. For development and for the hl target you can run without it, and HashLink itself builds as an ordinary C project with a documented dependency list.
Can Haxe replace Node.js or PHP for a backend service?
It can compile to jvm, php, python, js and hl, so the same service logic can target whichever runtime your infrastructure already runs. The practical answer is that teams adopt it for the shared-code property — one validation and protocol layer across client and server — rather than to replace a runtime they are happy with.
Is Haxe free for commercial use? Yes. The compiler is distributed under GPL-2.0-or-later and the standard library and runtimes under MIT. Commercial projects ship compiled Haxe output in production across games, desktop tools and web apps.
💰 想测试你的市场判断力?我用 Polymarket 做预测市场交易——这是全球最大的预测市场平台,从大选结果到技术监管时间线,什么都可以押注。和赌博不同,这是真正的信息市场:你懂的信息越多,胜率越高。我靠预测技术相关事件的走向已经赚了不少。用我的邀请链接注册:Polymarket.com