When to Use Bazel?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • Bazel

    a fast, scalable, multi-language and extensible build system

  • remote-apis

    An API for caching and execution of actions on a remote system.

  • Regardless of whether you should use Bazel or not, my hope is that any future build systems attempt to adopt Bazel's remote execution protocol (or at least a protocol that is similar in spirit):

    https://github.com/bazelbuild/remote-apis

    In my opinion the protocol is fairly well designed.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • rules_go

    Go rules for Bazel

  • There’s an issue I reported (along with a proof of concept fix) over 4 years ago, that has yet to be fixed: building a mixed source project containing Go & C++ & C++ protocol buffers results in silently broken binaries as rules_go will happily not forward along the linker arguments that the C++ build targets (the protobuf ones, using the built in C++ rules) declare.

    See https://github.com/bazelbuild/rules_go/issues/1486

    Not very confidence inspiring when Google’s build system falls over when you combine three technologies that are used commonly throughout Google’s code base (two of which were created by Google).

    If you’re Google, sure, use Bazel. Otherwise, I wouldn’t recommend it. Google will cater to their needs and their needs only — putting the code out in the open means you get the privilege of sharing in their tech debt, and if something isn’t working, you can contribute your labor to them for free.

    No thanks :)

  • rules_rust

    Rust rules for Bazel

  • Bazel doesn't allow targeting a lot of platforms (especially embedded) from Rust, even when the Rust ecosystem supports these targets. Something is off with its design if new work needs to be done for every platform that's already available behind an interface that's as consistent as what rustc gives.

    What is supported needs to be inferred from this file, as far as I can tell: https://github.com/bazelbuild/rules_rust/blob/main/rust/plat...

  • hashver-maven-plugin

  • If you are stuck with large Java / Maven repository and want to speedup builds, check this out: https://github.com/avodonosov/hashver-maven-plugin

  • Git

    Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via GitGitGadget (https://gitgitgadget.github.io/). Please follow Documentation/SubmittingPatches procedure for any of your improvements.

  • While there are fewer Perl and shell commands than in the past, several remain. Scroll down to git-add—-interactive.perl to see:

    https://github.com/git/git/tree/master

  • embedded-postgres-binaries

    Lightweight bundles of PostgreSQL binaries with reduced size intended for testing purposes.

  • Nice, this seems a lot simpler than I thought. Nice tip on embedded-postgres-binaries (https://github.com/zonkyio/embedded-postgres-binaries).

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • bazel-gba-example

    Bazel GBA (Game Boy Advance) Example

  • I made a demo project that you can build with Bazel. I've tested it with Bazel 5. It should build on macOS and Linux with just devtools + Bazel 5.

    https://github.com/depp/bazel-gba-example

  • rustls

    A modern TLS library in Rust

  • I just went through this recently (built a rust binary on my local machine, sent a binary to another person, they reported GLIBC errors, had to rebuild with the musl target, various crates depending on openssl failed) and found that every library that depended on openssl by default also had a `rusttls` feature in the crate that disabled openssl and enabled rusttls (https://github.com/rustls/rustls) instead.

    So I just migrated everything over to that (which consisted of enabling the `rusttls` feature for every crate) and made another build with musl. Everything worked perfectly fine, and since it's not a performance sensitive application, there was basically no drawbacks. The binary became a bit bigger, but still under 4MB (with other assets baked into it) so wasn't a big issue.

  • bob

    Bob is a high-level build tool for multi-language projects. (by benchkram)

  • The concept of explicitly declared inputs and outputs is awesome. Though it's closed build and the necessity to define the builds down to the compiler level makes Bazel complex and breaks some developer workflows.

    For this reason we are building a Bazel competitor with a less restrictive build environment which can also be applied to projects with lower than 1M line of code.

    https://bob.build

  • bazel-c-rust-x86_linux-armv7_baremetal

    demonstrate a rust library that can be tested on a linux PC and deployed on a mostly-C baremetal device

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts