Haxe 5.0.0-preview.1

Released: 2025-07-04

Thank you for choosing Haxe!
Download for your platform and start developing today.

This is a pre-release
The current stable release version is Haxe 4.3.7.

Release Notes

Dear Community,

On behalf of the Haxe Foundation, we are proud to announce that Haxe 5.0.0-preview.1 is now officially released! Check out the changelog below for more information.

As a preview release, it should not be considered stable and does, in fact, have some known issues. However, we appreciate anyone testing this version as it is going to ultimately help with the real Haxe 5 release. If you have any suggestions or run into any problems, feel free to open an issue on GitHub.

Thanks to everyone involved!


Note: if you are getting this error:

Uncaught exception - is not a valid version string

It means that you are using an older haxelib version that is not compatible with haxe 5.0.0-preview.1.

You can either update it:

haxelib update haxelib

Or remove it (and use the version shipped with Haxe):

haxelib remove haxelib

If that doesn't work, try running the command with --global.

Change Log

2025-07-04 5.0.0-preview.1

Removal:

  • all : remove 32 bit windows builds (#11541)
  • all : move sys.db, php.Web and neko.Web to hx4compat lib (#11385)
  • all : move haxe.remoting to hx4compat lib (#11387)
  • all : remove haxe.Ucs2 (#12103)
  • hl : move some hl.Format into lib format/heaps (#11869)
  • java/cs : remove C# and Java targets (#11551)
  • macro : remove some API from haxe.macro.Compiler (#11540)
  • macro : remove CompilationServer.setModuleCheckPolicy options (#11615)

Breaking changes:

  • all : rework module resolution (#11168)
  • all : don't infer string on concat (#11318)
  • all : delay typer creation to after init macros (#11323)
  • all : disallow partial resolution (pack.SubType access when module is imported) (#11338)
  • all : don't create a class field for every enum field (#11452)
  • all : only set cf_expr_unoptimized if we think we need it (#11462)
  • all : fix the way optional arguments are handled when using bind (#11533)
  • all : don't bind foreign type parameters in definition mode (#11658)
  • all : disallow duplicate argument name (#11978)
  • all : fix types in null coal null check (#11726)
  • macro : Build macro order vs inheritance (#11582)
  • macro : disallow defining types into existing modules (#11845)

General improvements:

  • all : hxb (new server cache + pre compilation) (#11504)
  • all : rework module resolution (#11168)
  • all : add "Custom" target (#11128)
  • all : private getters/setters (#12204)
  • all : allow boolean operators in patterns (#11157)
  • all : explicitly apply default type parameter (#12002)
  • all : allow modification of loop var in IntIterator loop (#8581)
  • all : support overloading true extern constructors (#11979)
  • all : support f?.bind() (#11571)
  • all : rework defines (#12130, #12251)
  • all : abort compilation on first error with -D fail-fast (#11609)
  • all : add position and error message to decode_error.txt (#12128)
  • all : add configuration options for -D dump, set -D dump-ignore-var-ids by default (#12150, #12130)
  • all : add support for binary literal (#11627)
  • all : add support for --undefine to remove define (#11400)
  • all : add optional WUnsafeEnumEquality (#11813)
  • all : build macOS universal binaries (#11572)
  • all : [experiments] run parts of the compiler in parallel with -D enable-parallelism (#12070, #12134, #12081, #12252)
  • all : [std] add enum as haxe.Unit (#11563)
  • all : [std] add BigInteger type (#10750)
  • all : [std] add haxe.runtime.Copy (#11863)
  • all : [std] haxe.Timer.milliseconds (#12260)
  • all : [std] String.indexOf (#7402, #11569)
  • all : [std] add StringBuf.clear() (#11848)
  • all : [std] allow setting haxe.Exception.stack (#12213)
  • all : [std] Serializer: implement reset method (#12068)
  • all : [std] use Vectors in haxe.zip (#11034)
  • all : [messageReparting] pretty errors as default message reporting (#11587)
  • all : [messageReporting] add config to use absolute positions (#11439)
  • all : [display] diagnostics as json rpc (#11412)
  • all : [display] report null safety errors in diagnostics (#11729)
  • all : [display] add server/resetCache (#11482)
  • all : [server] add support for ipv6 addresses for --wait/--connect (#11310)
  • all : [server] improve GC stats tracking (#12246)
  • all : [server] remove custom ocaml GC handling (#12287)
  • hl : bump default hl_version to 1.15 for haxe 5 (#12065)
  • hl : add std.hl.Gc.getLiveObjects (#11599)
  • hl : add element type to HArray (#11734)
  • hl : optimize single char String and adding with empty string
  • hl : added guid type
  • hl : hl.Profile.event give code some meaning with enum abstract (#12262)
  • jvm : improve NativeOutput performance (#11944)
  • jvm : functional interface support (#11019)
  • cpp : add Tracy profiler extern (#11772)
  • cppia : generate full debug source paths (#12053)
  • js : use native maps when ES6 is enabled (#11698)
  • js : remove String.fromCodePoint polyfill for es6 (#11713)
  • js : add the canParse() and parse() static methods to URL (#11802)
  • js : add externs for the Screen Wake Lock API (#11421)
  • js : add externs for the Web Share API (#11423)
  • js : update Object and Symbol externs (#11331)
  • js : clean up ES5 implementation of StringMap.keys() (#11895)
  • js : add new WebGLPolygonMode extension (#12026)
  • js : add js.lib.NativeStringTools (#12127)
  • php : add externs for some POSIX functions (#11769)
  • macro : delay typer creation to after init macros (#11323)
  • macro : added Context.resolveComplexType
  • macro : add TypeTools.toBaseType() (#11153)
  • macro : add TypeTools.resolveTypeParameters (#11053)
  • macro : add PositionTools.toZeroRange(pos) to avoid messing up display requests (#11892)
  • macro : apply @:using after build macros (#11625)
  • macro : include module path in virtual file names (#11852)
  • macro : respect imports on @:build (#11373)
  • macro : [server] expose compilation server stats (#12290)
  • macro : [server] add memory print that support details for macro interpreter (#11644)
  • eval : atomics (#12275)

Bugfixes:

  • all : fix @:wrappedException type (#11140)
  • all : don't allow null-only switches if we need a value (#11366)
  • all : detect recursive hxmls (#11580)
  • all : use local name instead of temp name for ?? (#11464)
  • all : fix local statics vs display requests (#11849)
  • all : fix unclosed monomorphs in function signature (#11381)
  • all : update target config after init macros (#11985)
  • all : local static vs local functions (#11999)
  • all : fix null coal assign (#11980)
  • all : static extension with name _new resolving incorrectly to abstract new (#11994)
  • all : allow Single div without cast to Float (#12039)
  • all : recurse into singularly constrained monos for field collection (#11918)
  • all : also skip mono ids if -D dump-ignore-var-ids (#12126)
  • all : renamed -D *-times defines to -D times.* (#12101)
  • all : apply @:haxe.warning rules to cached warnings too (#11775)
  • all : avoid some capture variable wrapping in non-loops (#12235)
  • all : @:noCompletion vs. static extensions (#12254)
  • all : use available terminal columns instead of hardcoded 80 columns (#11404)
  • all : track actual path position for path.Path<Params> (#11405)
  • all : set --run args only when we're actually running (#11524)
  • all : [std] do not close unowned socket in Http.customRequest (#12069)
  • all : [std] fix zipfiles not having data descriptor after filedata (#11686)
  • all : [std] implement EnumValueMap.compareArg properly (#12139)
  • all : [std] Syntax.code: remove double curly braces escaping (#11231)
  • all : [typer] check default type parameter constraints (#11556)
  • all : [typer] fix custom array access temp var handling (#11248)
  • all : [typer] valid redefinition rework (#11657)
  • all : [typer] give better "Cannot extend by" error (#11352)
  • all : [typer] delay unknown ident errors in overloads (#11372)
  • all : [typer] support safe nav for assign ops (#11379)
  • all : [typer] don't allow @:structInit to call abstract constructors (#11342)
  • all : [typer] align null coalescing top down inference with normal if/else (#11425)
  • all : [typer] deal with for (i in throw) (#11403)
  • all : [typer] type operator lhs against expected type (#11428)
  • all : [typer] consume bypass_accessor only if it's actually relevant (#11488)
  • all : [typer] don't hide abstract type when resolving through @:forward (#11526)
  • all : [typer] don't consider @:structInit + @:from when inferring (#11535)
  • all : [typer] avoid lhs cast on ambiguous operators (#12146)
  • all : [typer] abstract vs. mono hard unification error (#12182)
  • all : [typer] follow through abstract underlying types for null-checks when matching (#11716)
  • all : [typer] fix Monomorph vs Null<T> inference issue (#11851)
  • all : [typer] fail softer on multiple read/write resolve methods (#11757)
  • all : [typer] always allow local function type parameters (#11520)
  • all : [typer] disallow ?.new and ?.match (#11799)
  • all : [generics] use tclass instead of TType.t for substitution (#11784)
  • all : [generics] ensure type substitution happens for closures too (#12173)
  • all : [xml] fix when string ends with escape sequence (#11883)
  • all : [xml] fixed xml cased escape sequences (#11914)
  • all : [analyzer] inline ctors improved handling of ignored exprs (#11356)
  • all : [analyzer] fix captured checks in constructor inliner (#11356)
  • all : [analyzer] fix for inline constructors bug (#12169)
  • all : [analyzer] fix stack overflow on empty TBlock (#11393)
  • all : [analyzer] disallow Void in compound block expressions (#11391)
  • all : [analyzer] reconstruct binops in return (#12243)
  • all : [analyzer] send all types to analyzer for purity inference (#12224)
  • all : [analyzer] const propagation typing fixes (#12059)
  • all : [filters] avoid overlap work if we reserve anyway (#11174)
  • all : [filters] recurse into expressions of local statics (#11469)
  • all : [nullSafety] don't check return expr in assignments (#11114)
  • all : [nullSafety] only process fields that do not have CfPostProcessed flag (#11185)
  • all : [nullSafety] fix null arg check (#11076)
  • all : [nullSafety] detect nulls in structs (#11099)
  • all : [nullSafety] more nullSafety compatibility in std (#12141)
  • all : [nullSafety] better error range for anon fields (#12188)
  • all : [nullSafety] improve control flow in binops (#12197)
  • all : [nullSafety] some inline api fixes (#12210)
  • all : [nullSafety] allow statics init in main (#12211)
  • all : [parser] fix ?? precedence (#11144)
  • all : [parser] catch duplicate #else (#11208)
  • all : [parser] check for Eof (#11368)
  • all : [parser] detect trailing metadata (#11389)
  • all : [parser] allow using anonymous functions in operator expressions (#12015)
  • all : [parser] fix format string reentrency (#12159)
  • all : [printer] use parentheses for arrow function with argument default value (#12248)
  • all : [display] avoid display issues with missing fields (#11251)
  • all : [display] don't populate cache from xml diagnostics (#11696)
  • all : [display] run some filters in diagnostics (#11220)
  • all : [display] insert EDisplay in the proper position when parsing a call expression. (#11441)
  • all : [display] use correct position for alias imports (#11516)
  • all : [display] do not silently replace missing types with Dynamic (#11760)
  • all : [display] catch 'die' calls in diagnostics (#11984)
  • all : [display] browse for EDisplay when calls fail (#11422)
  • all : [server] do not crash when client exits before end of compilation
  • hl : rework Null<Int/Float/Bool> comparison for spec/alloc (#11612)
  • hl : fix -D hl-check error pos (#11727)
  • hl : fix interface override function resolution (#11723)
  • hl : fix debug info missing for catch e:String, arg with unify error (#11717)
  • hl : fix debug pos in assign when reg reuse arg (#11808)
  • hl : use HDyn instead of erroring on recursive types (#11844)
  • hl : fix array pos check, force UInt (#11810)
  • hl : fix debug assigns not sorted when not optimize (#12006)
  • hl : allow assign struct to packed (#12043)
  • hl : consider _ prefix when checking reserved keywords (#12090)
  • hl : fix no analyzer-optimize (#12107)
  • hl : make Reflect.field work with enums (#12117)
  • hl : CArray add blit, fix unsafeSet (#12118)
  • hl : fix __string null access when toString return null (#12143)
  • hl : fix debug function pos in wrapper, enum, init (#12207)
  • hl : use classpaths relative_path for get_relative_path (#12219)
  • hl : fix Type.typeof(HI64) to return TInt (#12264)
  • hl : haxe.io.BytesBuffer.__expand check overflow (#12267)
  • hl : added hl.Api.unsafeCast, allow CArray unsafe set
  • hl : hlopt rework try-catch control flow (#11581)
  • hl : make sure -dce full will not remove @:struct fields as they match native code
  • hl : fix do-while loop in genhl+hlopt (#11461)
  • hl/c: fix reserved keywords (#11408)
  • hl/c : fix SMOD/SDIV overflow exception when INT_MIN / -1 (#11917)
  • hl/c : split hl_init_roots to prevent out of heap in msvc (#11988)
  • jvm : allow - in resource names (#11275)
  • jvm : function arguments with type parameters not generating correctly (#11362)
  • jvm : refer to static instance methods correctly (#11023)
  • jvm : annotation rework (#11398)
  • jvm : deal with complex static inits (#11998)
  • jvm : deal with local function default arguments (#12094)
  • jvm : assign dynamic method only if it's null (#11530)
  • jvm : fix invokeDynamic arity
  • jvm : use HashMap for IntMap too
  • jvm : remove redundant ordinal comparison on enums (#11591)
  • cpp : enum Type Checking (#11444)
  • cpp : fix abstract class functions with default values (#11667)
  • cpp : absolute paths with -D absolute-path (#11763)
  • cpp : fix mismatching type and getter return on pointer (#12055)
  • cpp : allow setting callback for cppia script load (#12051)
  • cpp : prevent use of AtomicObject (#11674)
  • cpp : do not store AtomicInt Gc memory in cpp.Pointer (#12236)
  • js : fix wrong calculation for Int64 (ushr / add) methods (#11868)
  • js : avoid optimizing Std.is away in api_inline (#12133)
  • js : avoid crash in HttpNodeJs when no connection (#12137)
  • js : remove weird class name omission (#11071)
  • js : fix enums parameters generation to make it compatible with advanced JS minification tools (#11328)
  • lua : emit class name even if not required (#11112)
  • lua : fix do while loops (#11807)
  • lua : fix for wrong left shift with -1 (#11889)
  • lua : fix internal loop var updates (#12193)
  • lua : fix unnecessary _hx_do_first (#11453)
  • lua : allow generating sourcemaps for Lua in the same format as JS (#11454)
  • lua : share metatables with other class instances (#11103)
  • neko : optimise BytesBuffer length field (#11090)
  • python : mark threads as daemon threads (#12096)
  • hl/neko/eval : don't avoid exception wrapping (#12049)
  • macro : catch eval runtime failures when decoding (#11633)
  • macro : skip abstract impl classes when applying addGlobalMetadata (#11546)
  • macro : don't exception-wrap every API function (#11374)
  • macro : don't apply @:native names (#11481)
  • macro : display failing macro for "Build failure" errors (#11635)
  • macro : delay exclude macro turning types into externs until filters (#11685)
  • macro : use better error position for null_pos uncaught exceptions (#11788)
  • macro : fail nicer if we can't find a macro function (#11776)
  • macro : deal with module fields in Compiler.exclude (#11688)
  • macro : avoid polluting lexer cache with Context.parseInlineString (#11920)
  • macro : account for sub-types in ComplexTypeTools.toComplex() (#11273)
  • macro : build metadata with basic types from current context (#11336)
  • macro : fix TVar resolution (#11339)
  • macro : don't lose static modifier in ExprTools.map (#12030)
  • eval : fix ssl cert verification failures on clean windows environments (#11838)
  • eval : fix field typo in haxe.zip.Compress (#11143)