Skip to main content
In case of an error, you might find an answer of how to deal with it here.

Building Ladybird

CMake fails to configure the build because it’s outdated

Ensure your CMake version is >= 3.30 with cmake --version. If your system doesn’t provide a suitable version of CMake, you can download a binary release from the CMake website.
CMake 3.30 or newer is required to build Ladybird.

GCC is missing or is outdated

Ensure your gcc version is supported by the build system with gcc --version. Otherwise, install it. If your gcc binary is not called gcc you have to specify the names of your C and C++ compiler when you run cmake:
cmake ../.. -GNinja -DCMAKE_C_COMPILER=gcc-13 -DCMAKE_CXX_COMPILER=g++-13
See the build instructions for supported compiler versions.

Legacy renegotiation is disabled

Ensure your /etc/ssl/openssl.cnf file has the following options:
[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1
Options = UnsafeLegacyRenegotiation

When building with the Qt UI on macOS, you may encounter the following message:
CMake Warning at /opt/homebrew/Cellar/qt/6.7.0_1/lib/cmake/Qt6/FindWrapOpenGL.cmake:48 (target_link_libraries):
Target "ladybird" requests linking to directory "/usr/X11R6/lib". Targets
may link only to libraries. CMake is dropping the item.
…followed by 14-line stack trace, the top of which is this:
Build/vcpkg/scripts/buildsystems/vcpkg.cmake:859 (_find_package)
Despite the warning message shown in bright yellow, you’ll be able to build successfully with the Qt UI. This warning can be safely ignored.

Running Ladybird

Race condition on exit when running headless on systems with llvmpipe

When running --headless=text or --headless=layout-tree on a UNIX system with the llvmpipe software rasterizer (common default on virtual machines), Ladybird will occasionally terminate with:
double free or corruption (!prev)
Solution: Run Ladybird with --force-cpu-painting to make that go away.
./Build/release/bin/Ladybird --force-cpu-painting --headless=text
Likely explanation: atexit handlers are registered twice possibly due to llvmpipe and fork/exec interaction issues when starting WebContent process.

Build docs developers (and LLMs) love