HHVM 4.140 is released! This release marks the end of support for 4.134; HHVM 4.135–4.139 remain supported, as do the 4.102 and 4.128 LTS releases.

v4.140 is the last release in 2021. Happy Holidays!


  • Various bug fixes for the readonly data types.
  • Various error message improvements.
  • The typechecker now understands the coeffects of \preg_replace_callback() and \preg_replace_callback_with_error(). See this commit for the new signature.

Breaking Changes

  • JitAHotSize and JitAProfSize runtime options are removed
  • Ban UNSAFE_CAST in lvalues and await operands. The following code does not type-check any more:
    • HH\FIXME\UNSAFE_CAST<mixed, dict<int, string>>($m)[0] = "lvalue";
    • await HH\FIXME\UNSAFE_CAST<Awaitable<mixed>, Awaitable<int>>(foo());
  • Now a clone of a readonly object is also readonly.
  • The functions \preg_replace_callback() and \preg_replace_callback_with_error() now take a (function(darray<arraykey, string>)[_]: string) as the second parameter in the typechecker, instead of an untyped value.