Getting Started: The Hack Standard Library

About the Hack Standard Library (HSL)

HHVM is distributed with a growing set of functions and classes collectively called the Hack Standard Library (HSL). These are intended to complement, or in some cases replace previous built-in APIs.

There are two related GitHub projects/Composer packages:

  • hhvm/hsl: The Hack Standard Library for users of HHVM < 4.108
  • hhvm/hsl-experimental: Experimental features, which may be added to the Hack Standard Library in the future

Note: Before HHVM 4.108, the Hack Standard Library was distributed in a separate repository from HHVM.

HSL Namespaces

The Hack Standard Library is grouped by namespace. For a full list, see HSL Reference.

Also included is the static class Ref, with Ref::get and Ref::set, which is useful for setting reference values with anonymous functions.

Containers and Hack Arrays

A collection of functions for working with Hack Arrays and other types of containers.

Namespace Description
C\ Functions that operate on containers, but do not return or require a specific kind of container, such as C\contains().
Vec\ Functions that return, create, or operate on the vec type, such as Vec\drop().
Keyset\ Functions that return, create, or operate on the keyset type, such as Keyset\map().
Dict\ Functions that return, create, or operate on the dict type, such as Dict\sort().

Strings and Regular Expressions

A collection of functions for working with strings.

Namespace Description
Str\ Functions for interacting with the string type, such as Str\contains().
Regex\ Functions that perform regular expression matching on string, such as Regex\replace.
Locale\ Functions for retrieving and creating Locale objects, for example: en_US.UTF-8.

Math and Random Number Generation

A collection of functions for math operations and types of randomization.

Namespace Description
Math\ Functions for common math operations, like Math\sqrt, Math\min, and Math\max.
PseudoRandom\ Functions for pseudo-randomization, focusing on performance.
SecureRandom\ Functions for secure randomization, focusing on security.


A standard API for input and output.

Namespace Description
File\ A library for reading, writing, and creating files, such as File\temporary_file.
IO\ A library for working with asynchronous input/output streams.

HSL IO Low-Level APIs

Other low-level APIs used by HSL IO.

Namespace Description
OS\ APIs for creating, opening, and operating on file descriptors, like OS\open or OS\pipe.
Unix\ APIs for Unix-based client and server interaction.
TCP\ APIs for client and server interaction that uses the Transmission Control Protocol (TCP).
Network\ APIs for client and server interaction.


In addition to the content outlined in Asynchronous Operations, there are a few utility classes in the Async\ namespace.

Namespace Description
Async\ A library for controlling asynchronous behavior, with classes like Async\Semaphore, Async\Poll, and Async\KeyedPoll.
Was This Page Useful?
Thank You!
Thank You! If you'd like to share more feedback, please file an issue.