|Developer(s)||Meta Platforms, Inc.|
|Initial release||April 17, 2013|
2021.01.12.01 / January 12, 2021
|License||Apache License 2.0|
Buck is a multi-language build system developed and used by Meta Platforms, Inc. It was designed for building small, reusable modules consisting of code and resources within a monorepo. It supports C++ (Objective-C, Swift), Shell, Java (Kotlin, Groovy), Python, Lua, OCaml, Rust, Go and other languages as source code input. It can produce binary outputs for a variety of target platforms including IOS, Android, .NET and Java VM runtimes. Buck is licensed under the Apache License 2.0.
Buck requires the explicit declaration of dependencies and enforces this using a symbolic link tree. Because all dependencies are explicit and Buck has a directed acyclic graph of all source files and build targets, Buck can perform incremental recompilation, only rebuilding targets downstream of files that have changed. Buck computes a key for each target that is a hash of the contents of the files it depends on. It stores a mapping from that key to the build target in a build cache. If targets are deterministic functions of the contents of their dependencies, then this build cache can be shared between developers and continuous integration (CI) as Buck supports a HTTP Cache API.
Buck is designed to build multiple deliverables from a single repository—that is, a monorepo—rather than from multiple repositories