Original author(s) | Michael Bolin |
---|---|
Developer(s) | Meta Platforms, Inc. |
Initial release | April 17, 2013[1] |
Stable release | 2021.01.12.01
/ January 12, 2021[2] |
Repository | |
Written in | Buck1 – Java Buck2 – Rust |
Operating system | Cross-platform |
License | MIT[3] or Apache License 2.0[4] |
Website | buck2 |
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.[5] It supports many programming languages, including C++, Swift, Unix Shell, Java, Kotlin, Python, Lua, OCaml, Rust and Go. It can produce binary outputs for a variety of target platforms including iOS, Android, .NET, and Java virtual machine (VM) runtime systems. Licensing for Buck1 is under Apache License 2.0, while Buck2 is under either MIT or Apache 2.0.[3][4]
Buck requires the explicit declaration of dependencies. 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.
Buck is designed to build multiple deliverables from a single repository—that is, a monorepo—rather than from multiple repositories