--- layout: docu redirect_from: - /dev/building - /dev/building/ - /docs/dev/building - /docs/dev/building/ - /docs/dev/building/build_instructions - /docs/dev/building/build_instructions/ - /docs/dev/building/platforms - /docs/dev/building/platforms/ - /docs/dev/building/supported_platforms - /docs/dev/building/supported_platforms/ - /docs/dev/building/overview title: Building DuckDB from Source --- ## When Should You Build DuckDB? DuckDB binaries are available for _stable_ and _preview_ builds on the [installation page]({% link docs/installation/index.html %}). In most cases, it's recommended to use these binaries. When you are running on an experimental platform (e.g., [Raspberry Pi]({% link docs/stable/dev/building/raspberry_pi.md %})) or you would like to build the project for an unmerged pull request, you can build DuckDB from source based on the [`duckdb/duckdb` repository hosted on GitHub](https://github.com/duckdb/duckdb/). This page explains the steps for building DuckDB. ## Prerequisites DuckDB needs CMake and a C++11-compliant compiler (e.g., GCC, Apple-Clang, MSVC). Additionally, we recommend using the [Ninja build system](https://ninja-build.org/), which automatically parallelizes the build process. ## Platforms ### Supported Platforms DuckDB fully supports Linux, macOS and Windows. Both AMD64 (x86_64) and ARM64 (AArch64) builds are available for these platforms. | Platform name | Description | |--------------------|------------------------------------------------------------------------| | `linux_amd64` | Linux AMD64 (x86_64) with [glibc](https://www.gnu.org/software/libc/) | | `linux_arm64` | Linux ARM64 (AArch64) with [glibc](https://www.gnu.org/software/libc/) | | `linux_amd64_musl` | Linux AMD64 (x86_64) with [musl libc](https://musl.libc.org/) | | `osx_amd64` | macOS 12+ AMD64 (Intel CPUs) | | `osx_arm64` | macOS 12+ ARM64 (Apple Silicon CPUs) | | `windows_amd64` | Windows 10+ AMD64 (x86_64) | | `windows_arm64` | Windows 10+ ARM64 (AArch64) | For instructions to build from source, see: * [Linux]({% link docs/stable/dev/building/linux.md %}) * [macOS]({% link docs/stable/dev/building/macos.md %}) * [Windows]({% link docs/stable/dev/building/windows.md %}) ### Experimental Platforms There are several additional platforms with varying levels of support. For some platforms, DuckDB binaries and extensions (or a [subset of extensions]({% link docs/stable/extensions/extension_distribution.md %}#platforms)) are distributed. For others, building from source is possible. | Platform name | Description | |------------------------|------------------------------------------------------------------------------------------------------| | `freebsd_amd64` | FreeBSD AMD64 (x86_64) | | `freebsd_arm64` | FreeBSD ARM64 (AArch64) | | `linux_amd64_musl` | Linux AMD64 (x86_64) with musl libc, e.g., Alpine Linux | | `linux_arm64_android` | Android ARM64 (AArch64) | | `linux_arm64_gcc4` | Linux ARM64 (AArch64) with GCC 4, e.g., CentOS 7 | | `linux_arm64_musl` | Linux ARM64 (x86_64) with musl libc, e.g., Alpine Linux | | `wasm_eh` | WebAssembly Exception Handling | | `wasm_mvp` | WebAssembly Minimum Viable Product | | `windows_amd64_mingw` | Windows 10+ AMD64 (x86_64) with MinGW | | `windows_amd64_rtools` | Windows 10+ AMD64 (x86_64) for [RTools](https://cran.r-project.org/bin/windows/Rtools/) (deprecated) | | `windows_arm64_mingw` | Windows 10+ ARM64 (AArch64) with MinGW | > These platforms are not covered by DuckDB's community support. For details on commercial support, see the [support policy page](https://duckdblabs.com/community_support_policy#platforms). Below, we provide detailed build instructions for some platforms: * [Android]({% link docs/stable/dev/building/android.md %}) * [Raspberry Pi]({% link docs/stable/dev/building/raspberry_pi.md %}) ### Outdated Platforms DuckDB can be built for end-of-life platforms such as [macOS 11](https://endoflife.date/macos) and [CentOS 7/8](https://endoflife.date/centos) using the instructions provided for macOS and Linux. ### Unofficial and Unsupported Platforms Several platforms are not supported or supported on a best-effort basis. See the [“Unofficial and Unsupported Platforms” page]({% link docs/stable/dev/building/unofficial_and_unsupported_platforms.md %}) for details. ## Limitations Currently, DuckDB has the following limitations: * The DuckDB codebase is not compatible with [C++23](https://en.wikipedia.org/wiki/C%2B%2B23). Therefore, trying to compile DuckDB with `-std=c++23` will fail. * The `-march=native` build flag, i.e., compiling DuckDB with the local machine's native instructions set, is not supported. ## Troubleshooting Guides We provide troubleshooting guides for building DuckDB: * [Generic issues]({% link docs/stable/dev/building/troubleshooting.md %}) * [Python]({% link docs/stable/dev/building/python.md %}) * [R]({% link docs/stable/dev/building/r.md %})