> ## Documentation Index
> Fetch the complete documentation index at: https://site.aspect.build/llms.txt
> Use this file to discover all available pages before exploring further.

# Aspect Build Blog

> Insights on Bazel, developer productivity, build systems, and software engineering at scale.

export const BlogCard = ({title, description, date, authors, tags, image, href, children}) => {
  const tagList = tags ? tags.split(", ").filter(Boolean) : [];
  const tagSlug = t => t.toLowerCase().replace(/&/g, "").replace(/\+/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
  const formattedDate = date ? new Date(date + "T00:00:00").toLocaleDateString("en-US", {
    year: "numeric",
    month: "short",
    day: "numeric"
  }) : "";
  const resolvedImage = typeof image === "string" && image.trim() === "" ? null : image;
  return <div data-tags={tagList.join(",")} className="blog-card flex flex-col rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800 overflow-hidden hover:shadow-lg transition group">
      <a href={href} className="block">
        {resolvedImage ? typeof resolvedImage === "string" ? <img noZoom src={resolvedImage} alt={title} className="w-full" style={{
    height: "180px",
    objectFit: "cover"
  }} /> : <div className="blog-card-image">{resolvedImage}</div> : children ? <div className="blog-card-image">{children}</div> : null}
        <div className="px-5 pt-5">
          <h3 className="text-lg font-semibold text-zinc-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition">
            {title}
          </h3>
          {description && <p className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">
              {description}
            </p>}
          <div className="flex items-center gap-2 mt-3 text-xs text-zinc-500 dark:text-zinc-400">
            {authors && <span>{authors}</span>}
            {authors && formattedDate && <span>·</span>}
            {formattedDate && <span>{formattedDate}</span>}
          </div>
        </div>
      </a>
      {tagList.length > 0 && <div className="flex flex-wrap gap-1.5 px-5 pb-4 pt-3 mt-auto">
          {tagList.map(tag => <a key={tag} href={"/blog/tags/" + tagSlug(tag)} className="px-2 py-0.5 rounded-full text-xs bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 hover:bg-blue-100 dark:hover:bg-blue-900/40 hover:text-blue-700 dark:hover:text-blue-300 transition">
              {tag}
            </a>)}
        </div>}
    </div>;
};

export const MarketingPage = () => <div className="marketing-page-marker" style={{
  display: "none"
}} />;

export const NewsletterSignup = ({compact = false}) => <div className={compact ? "max-w-5xl mx-auto flex flex-wrap items-center justify-between gap-4 text-left" : "max-w-xl mx-auto text-center"}>
    <div>
    <h2 className="text-2xl font-semibold text-zinc-900 dark:text-white">Stay in the loop</h2>
    <p className="mt-2 text-zinc-600 dark:text-zinc-300">Bazel tips, releases, and engineering posts from the Aspect blog. No spam.</p>
    </div>
    <form id="newsletter-form-blog" name="Newsletter Subscription" method="POST" onSubmit={e => {
  e.preventDefault();
  const form = e.currentTarget;
  try {
    const email = new FormData(form).get("email") || "";
    const guid = "772d2567-e581-4b6e-a043-91ea3fe5023f";
    const fsid = "xkoaqedr";
    const hutk = (document.cookie.match(/hubspotutk=([^;]+)/) || [])[1];
    if (guid && email) fetch("https://api.hsforms.com/submissions/v3/integration/submit/46621241/" + guid, {
      method: "POST",
      keepalive: true,
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        fields: [{
          name: "email",
          value: String(email)
        }],
        context: {
          pageUri: window.location.href,
          pageName: document.title,
          ...hutk ? {
            hutk
          } : {}
        }
      })
    }).catch(() => {});
    if (fsid && email) fetch("https://formspree.io/f/" + fsid, {
      method: "POST",
      keepalive: true,
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        email: String(email),
        form: "newsletter"
      })
    }).catch(() => {});
  } catch (err) {}
  setTimeout(() => {
    const btn = form.querySelector("button");
    if (btn) {
      btn.textContent = "Subscribed ✓";
      btn.disabled = true;
    }
    form.reset();
  }, 400);
}}>
      <div className={compact ? "flex flex-wrap items-center gap-3" : "mt-6 flex flex-wrap justify-center gap-3"}>
      <input type="email" name="email" required placeholder="Work email" className="px-4 py-3 rounded-lg border border-zinc-300 dark:border-zinc-700 bg-white dark:bg-zinc-800 text-zinc-900 dark:text-white placeholder-zinc-400 focus:border-blue-500 focus:ring-2 focus:ring-blue-500/20 outline-none transition min-w-[260px]" />
      <button type="submit" className="px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition cursor-pointer">Subscribe</button>
      </div>
    </form>
  </div>;

export const Section = ({children, className = "", gray = false, dark = false, id}) => <section id={id} className={`w-full flex justify-center px-4 py-16 md:py-24 ${gray ? "bg-gray-50 dark:bg-zinc-900" : dark ? "bg-zinc-900 dark:bg-zinc-950" : ""} ${className}`}>
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {children}
    </div>
  </section>;

export const Hero = ({title, subtitle, badge, primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#", centered = true, children}) => <section className="w-full flex justify-center px-4 pt-16 pb-16 md:pt-24 md:pb-24" style={{
  background: "linear-gradient(180deg, var(--hero-gradient-start, #f8fafc) 0%, var(--hero-gradient-end, #ffffff) 100%)"
}}>
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {centered && !children ? <div className="flex flex-col items-center text-center">
          {badge && <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700 text-blue-700 dark:text-blue-300 text-sm font-medium mb-6">
              {badge}
            </div>}
          <h1 className="text-4xl md:text-5xl font-semibold text-zinc-900 dark:text-white leading-tight tracking-tight" style={{
  maxWidth: "820px"
}}>
            {String(title).split(/\\n|\n/).map((line, i) => i ? [<br key={i} />, line] : line)}
          </h1>
          {subtitle && <div className="subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed" style={{
  marginTop: "1rem",
  maxWidth: "600px"
}}>
              {subtitle}
            </div>}
          <div className="flex flex-wrap gap-3 mt-10 justify-center">
            {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">
                {primaryCta}
              </a>}
            {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
                {secondaryCta}
              </a>}
          </div>
        </div> : <div className="flex flex-col md:flex-row items-center gap-10 md:gap-16">
          <div className="flex-1 min-w-0">
            {badge && <div className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-blue-50 dark:bg-blue-900/30 border border-blue-200 dark:border-blue-700 text-blue-700 dark:text-blue-300 text-sm font-medium mb-6">
                {badge}
              </div>}
            <h1 className="text-4xl md:text-5xl font-semibold text-zinc-900 dark:text-white leading-tight tracking-tight">
            {String(title).split(/\\n|\n/).map((line, i) => i ? [<br key={i} />, line] : line)}
          </h1>
            {subtitle && <div className="subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed" style={{
  marginTop: "1rem"
}}>
                {subtitle}
              </div>}
            <div className="flex flex-wrap gap-3 mt-8">
              {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">
                  {primaryCta}
                </a>}
              {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-700 dark:text-zinc-200 font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-800 transition ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
                  {secondaryCta}
                </a>}
            </div>
          </div>
          {children && <div className="flex-1 min-w-0 hero-image">
              {children}
            </div>}
        </div>}
    </div>
  </section>;

<MarketingPage />

<Hero title="Blog" subtitle="Insights on Bazel, developer productivity, and building software at scale." />

<Section>
  <div className="marketing-grid-3">
    <BlogCard title="Which tests are affected? Ask the cache, run nothing." description="How aspect cache diff figures out which tests a change can break, using only a remote cache and Bazel's gRPC log, without executing anything." date="2026-06-19" authors="Şahin Yort" href="/blog/selective-testing-with-cache-diff" tags="Aspect CLI, Remote Cache, CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/47KirY4nMIQxGx6F/images/blog/stock/box-selected.jpg?fit=max&auto=format&n=47KirY4nMIQxGx6F&q=85&s=7e551722ebee512510b1414a80a96bdc" alt="" width="1200" height="743" data-path="images/blog/stock/box-selected.jpg" />
    </BlogCard>

    <BlogCard title="Start a new Bazel project with aspect init" description="aspect init is now a native Aspect CLI command, and the language starter templates live at github.com/aspect-starters with a Use this template button." date="2026-06-14" authors="Greg Magolan" href="/blog/aspect-init-and-starters" tags="Bazel, Aspect CLI">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-b7f01104a1.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=558844bd2581ad93d62fbed4b786ab1d" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-b7f01104a1.jpeg" />
    </BlogCard>

    <BlogCard title="rules_js 3.0 - out with the old (and default to the new)" description="What’s new in rules_js 3.0: default MODULE.bazel, removed old APIs and pnpm 8, and improved maintainability and correctness. Ideal upgrade path" date="2026-02-09" authors="Jason Bedard" href="/blog/rules-js-3" tags="JavaScript, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-d01957e7c5.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1e8b1d03278fff6cbe78514090f0697a" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-d01957e7c5.jpg" />
    </BlogCard>
  </div>
</Section>

<div className="w-full bg-zinc-50 dark:bg-zinc-800/50 border-y border-zinc-200 dark:border-zinc-700 px-6 py-5">
  <NewsletterSignup compact />
</div>

<Section>
  <div className="marketing-grid-3">
    <BlogCard title="Aspect's rules_lint Reaches 2.0" description="Explore rules_lint 2.0 featuring AXL, Python ty support, Rust Clippy integration, and full Bazel 9 compatibility for streamlined coding and review" date="2026-01-26" authors="Alex Eagle" href="/blog/rules-lint-2" tags="Linting, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-6e91f8e777.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=9530ae35063d683f5663487beae18b6a" alt="" width="1600" height="1098" data-path="images/blog/hashnode/hn-6e91f8e777.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel 9 Upstream Prebuilt Protobuf" description="Bazel 9 includes a prebuilt upstream protobuf compiler." date="2026-01-16" authors="Alex Eagle" href="/blog/bazel-9-protobuf" tags="Bazel, Releases">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-13978548c6.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c0a628464937bf2d3810807daf670029" alt="" width="2742" height="1814" data-path="images/blog/hashnode/hn-13978548c6.png" />
    </BlogCard>

    <BlogCard title="Bazel for SONiC: What We've Learned and Contributed" description="We explore the case for adopting Bazel across SONiC Foundation projects and update the SONiC and Bazel community on Aspect Build contributions." date="2026-01-12" authors="Şahin Yort" href="/blog/bazel-for-sonic" tags="Bazel, Migration, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-ee3145354f.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=176dc5b3012c102981daf24466a2790d" alt="" width="2716" height="1431" data-path="images/blog/hashnode/hn-ee3145354f.png" />
    </BlogCard>

    <BlogCard title="What's New at BazelCon 2025" description="Wow, it’s been an exciting year in Bazel-land. See highlights from the BazelCon 2025 keynotes, Hackathon, Aspect Build product releases and more." date="2025-11-20" authors="Alex Eagle" href="/blog/bazelcon-2025" tags="Bazel, Gazelle, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-5c38c2b694.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=13e15fc67f6449bdbfe36b69566e5a06" alt="" width="1536" height="1024" data-path="images/blog/hashnode/hn-5c38c2b694.png" />
    </BlogCard>

    <BlogCard title="Starlark linter: Buildifier" description="How to set up the Bazel Buildifier tool by Aspect Build" date="2025-10-14" authors="Alex Eagle" href="/blog/buildifier" tags="Linting, Gazelle, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-3c12d34767.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=765f17cfe8de931b65b9b8d3ae38a684" alt="" width="1920" height="1073" data-path="images/blog/hashnode/hn-3c12d34767.png" />
    </BlogCard>

    <BlogCard title="The best tool for the Bazel job might be older than you" description="Learn how to use mtree specification to reuse older code. Sometimes best tool may be an older one, promoting stability and reliability for your projects." date="2025-10-08" authors="Alex Eagle" href="/blog/mtree" tags="Containers & OCI, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-529f7ee538.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=375c9d29f59f40e3b36fd7b125c9ae2e" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-529f7ee538.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel Starlark Docs on the Registry" description="Explore Bazel Starlark API docs on the Registry for updated ruleset documentation, publishing guides, and community contribution opportunities" date="2025-10-01" authors="Alex Eagle" href="/blog/stardocs-on-bcr" tags="Gazelle, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-3f7edbd41c.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=f73ce6093be6e409e453c1d424152dd5" alt="" width="1893" height="1019" data-path="images/blog/hashnode/hn-3f7edbd41c.png" />
    </BlogCard>

    <BlogCard title="The 'outside of Bazel' pattern" description="The Bazel build tool is fantastic for taking a well-defined dependency graph, which is really a tree coming up from the root (the artifact to be built or test t" date="2025-08-26" authors="Alex Eagle" href="/blog/outside-of-bazel-pattern" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-65949321ec.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=bfe35f88abc01d96fb7fa650f145aa94" alt="" width="1536" height="1024" data-path="images/blog/hashnode/hn-65949321ec.png" />
    </BlogCard>

    <BlogCard title="Pnpm v10 and rules_js: Better Alignment and Improved Build Determinism" description="Pnpm v10 improves build determinism with rules_js, offering enhanced performance and reliability for Bazel-based workflows" date="2025-07-22" authors="Jason Bedard" href="/blog/pnpm-v10-and-rulesjs" tags="JavaScript, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-8e9d8d5326.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1c827c3d448a78ce938e4ea2508e01c5" alt="" width="1365" height="768" data-path="images/blog/hashnode/hn-8e9d8d5326.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel technique for Continuous Delivery" description="Learn about using Bazel for Continuous Delivery, distinguishing between CI, CD, and Deployment, and optimizing artifact delivery processes" date="2025-07-03" authors="Alex Eagle" href="/blog/bazel-technique-for-continuous-delivery" tags="Selective Delivery, CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-44f882ad1c.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=e3ce520f18be74952a3158397543eed7" alt="" width="1600" height="1065" data-path="images/blog/hashnode/hn-44f882ad1c.jpeg" />
    </BlogCard>

    <BlogCard title="Device management: tools on your developers PATH" description="Explore easier developer tool distribution with Bazel and direnv for seamless environment setup and management in your development workflow" date="2025-05-13" authors="Alex Eagle" href="/blog/bazel-devenv" tags="Bazel, Aspect CLI">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-07d3b9a0c1.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=29e8c046447aaded998231ce2a1acd27" alt="" width="1296" height="810" data-path="images/blog/hashnode/hn-07d3b9a0c1.jpeg" />
    </BlogCard>

    <BlogCard title="Never Compile protoc Again" description="Learn how to optimize Bazel builds by avoiding protoc compilation. Discover toolchain alternatives and solutions for faster, more efficient development." date="2025-04-28" authors="Alex Eagle" href="/blog/never-compile-protoc-again" tags="Bazel, Releases">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-64dadc5430.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=2a8fa0e5334e6fcad424c812a2772b13" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-64dadc5430.jpeg" />
    </BlogCard>

    <BlogCard title="Containerizing JavaScript Applications with Bazel" description="Learn how to optimize JavaScript container builds with rules_js's JsImageLayer. Discover layer groups for better build times and deployment efficiency." date="2025-04-21" authors="Şahin Yort" href="/blog/containerizing-javascript-applications-with-bazel" tags="Containers & OCI, JavaScript, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-7740d73e29.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=9d9c952fa795dc8b9abe4833c006be4b" alt="" width="1600" height="1064" data-path="images/blog/hashnode/hn-7740d73e29.jpeg" />
    </BlogCard>

    <BlogCard title="Securing Bazel's Module Registry" description="Bazel rulesets can now include attestations—cryptographic proof that release artifacts were built from trusted sources on secure infrastructure." date="2025-04-14" authors="Alex Eagle" href="/blog/securing-bcr" tags="Supply Chain Security, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-11f3e179ce.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=df9c30ee195d4b136a357b4991eb7b47" alt="" width="1600" height="1004" data-path="images/blog/hashnode/hn-11f3e179ce.jpeg" />
    </BlogCard>

    <BlogCard title="Dagger and Bazel" description="Compare Dagger and Bazel: explore key differences in containerization, configuration, language support, reproducibility, and community impact for build tool" date="2025-02-24" authors="Chris Chinchilla" href="/blog/dagger-and-bazel" tags="Bazel, CI/CD">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-ed4debf549.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=de9ef0c53f52b7a07d9fd551f05412b5" alt="" width="1914" height="1000" data-path="images/blog/hashnode/hn-ed4debf549.png" />
    </BlogCard>

    <BlogCard title="Self-hosting your CI/CD infra" description="Discover how Aspect Workflows powers Bazel CI/CD with a BYOC model, boosting security, compliance, cost control, and seamless integration in the cloud stack" date="2024-12-17" authors="Alex Eagle" href="/blog/self-hosting-your-cicd-infra" tags="CI/CD, Remote Execution">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-f821fe5c19.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=633954c396802c2a14ae6b6fb0914731" alt="" width="768" height="512" data-path="images/blog/hashnode/hn-f821fe5c19.jpeg" />
    </BlogCard>

    <BlogCard title="Bootstrap Complete: Aspect Build Raises $3.85M to Enable Developers in Massive, Multi-Language Codebases" description="Aspect Build raises $3.85M to enhance dev workflows for multi-language codebases, driving faster, reliable, and scalable software development" date="2024-10-01" authors="Alex Eagle" href="/blog/seed-round" tags="Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-bf327746dd.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0012d12e369a5cd5a1fcabac2b8e3872" alt="" width="3200" height="1680" data-path="images/blog/hashnode/hn-bf327746dd.png" />
    </BlogCard>

    <BlogCard title="Announcing Linting for Bazel" description="Bazel now offers linting with Aspect, boosting developer productivity through rules_lint and the Aspect CLI for seamless code analysis" date="2024-09-11" authors="Alex Eagle" href="/blog/lint" tags="Linting, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-709935109c.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=dca4230f2e396f8f143690ab20459853" alt="" width="1600" height="840" data-path="images/blog/hashnode/hn-709935109c.png" />
    </BlogCard>

    <BlogCard title="Announcing Remote Build Execution" description="Aspect Workflows now includes Remote Build Execution, speeding development by offloading computation to worker machines" date="2024-08-20" authors="Alex Eagle" href="/blog/announcing-remote-build-execution" tags="Remote Execution, CI/CD, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-76283152cc.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=cbaecf858ba886265d2665cc6a8091ad" alt="" width="1627" height="1219" data-path="images/blog/hashnode/hn-76283152cc.jpeg" />
    </BlogCard>

    <BlogCard title="rules_js 2.0" description="Upgrade to Aspect's rules_js 2.0 for faster Bazel builds, secure pnpm v9 support, direct js_library linking, and enhanced ESLint integration." date="2024-08-15" authors="Alex Eagle" href="/blog/rulesjs-2" tags="JavaScript, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-f046c7a577.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=9fc51a50952cd682a345d0034fd344d5" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-f046c7a577.jpeg" />
    </BlogCard>

    <BlogCard title="Keeping main green in a monorepo" description="Explore how to prevent red main branches with merge queues, on-call policies, and better CI practices to improve development workflows and team efficiency." date="2024-06-21" authors="Alex Eagle" href="/blog/keeping-main-green" tags="Monorepo, CI/CD">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-9071e4d0f6.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=3c35acebf82edbee6421490d4c6bad53" alt="" width="1600" height="1200" data-path="images/blog/hashnode/hn-9071e4d0f6.jpeg" />
    </BlogCard>

    <BlogCard title="Aspect Workflows Case Study: Sourcegraph" description="Learn how Sourcegraph improved CI/CD performance and reduced costs by implementing Aspect Workflows." date="2024-04-23" authors="Alex Eagle" href="/blog/case-study-sourcegraph" tags="Bazel, Company, CI/CD">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-4c92c9630e.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=a1f60c02f6c010f4cdbaa78aa8558999" alt="" width="1600" height="840" data-path="images/blog/hashnode/hn-4c92c9630e.png" />
    </BlogCard>

    <BlogCard title="Running local tools installed by Bazel" description="Manage command-line tools efficiently with Bazel. Streamline workflows, ensure version consistency, and boost development productivity with this approach." date="2024-04-05" authors="Alex Eagle" href="/blog/run-tools-installed-by-bazel" tags="Bazel, Aspect CLI">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-166ab5a701.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=892906b71a45590bed045f9e206153cb" alt="" width="1600" height="1068" data-path="images/blog/hashnode/hn-166ab5a701.jpeg" />
    </BlogCard>

    <BlogCard title="CODEOWNERS and Bazel" description="Learn how to manage code ownership in monorepos using CODEOWNERS, OWNERS files, and tools like Bazel for better code review workflows." date="2024-03-20" authors="Alex Eagle" href="/blog/codeowners-and-bazel" tags="Bazel, Monorepo">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-a8a7130c32.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5e7e16dc93d6d0b3c94391d57f8d1981" alt="" width="1509" height="694" data-path="images/blog/hashnode/hn-a8a7130c32.jpeg" />
    </BlogCard>

    <BlogCard title="Preventing production code depending on experiments" description="Learn how to manage experimental code in Bazel monorepos by restricting dependencies and ensuring faster iteration without risking production builds." date="2024-03-15" authors="Alex Eagle" href="/blog/preventing-production-code-depending-on-experiments" tags="Bazel, Monorepo">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-128f5e6ec9.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=df982f37e2715325a0cabd8f9f21f73c" alt="" width="1600" height="1065" data-path="images/blog/hashnode/hn-128f5e6ec9.jpeg" />
    </BlogCard>

    <BlogCard title="Publishing Bazel rules that depend on tools: take 2" description="Learn how Aspect uses Bazel toolchains to automate Rust and Go binary releases, ensuring efficient cross-compilation and smooth user experiences." date="2024-03-05" authors="Alex Eagle" href="/blog/releasing-bazel-rulesets-rust" tags="Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-d2f49d1d0d.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=033a6c4a82fdd09f7cbbde5c2e4d2bfc" alt="" width="1260" height="833" data-path="images/blog/hashnode/hn-d2f49d1d0d.jpeg" />
    </BlogCard>

    <BlogCard title="Fetching ML models under Bazel" description="Learn how to use Bazel to fetch and cache NLTK data hermetically, ensuring reproducible builds and reliable Python tests without network dependencies." date="2024-03-03" authors="Alex Eagle" href="/blog/fetching-ml-models-under-bazel" tags="Python, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-237621392e.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=905a79fb89e35750383eb1d02e2e5520" alt="" width="1254" height="836" data-path="images/blog/hashnode/hn-237621392e.jpeg" />
    </BlogCard>

    <BlogCard title="Easier merges on lockfiles" description="Resolve lockfile merge conflicts automatically with Git's 'ours' merge driver, streamlining your workflow and avoiding manual fixes." date="2024-01-22" authors="Alex Eagle" href="/blog/easier-merges-on-lockfiles" tags="Monorepo, JavaScript, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-9859a7d82b.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=f17678cae0fa97182f07910fa550feab" alt="" width="1254" height="836" data-path="images/blog/hashnode/hn-9859a7d82b.jpeg" />
    </BlogCard>

    <BlogCard title="rctx.download custom headers coming to Bazel 7.1" description="Learn how to use HTTP headers in Bazel's downloader for fetching Docker layers, Alpine packages, and more. Improve caching and avoid common HTTP issues." date="2024-01-03" authors="Şahin Yort" href="/blog/custom-download-headers" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-386af5b2db.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=246d29047fa4f5bd66661ca04c19cfa2" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-386af5b2db.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel market growth, year over year" description="Bazel adoption grew by 56% in 2023, with around 950 companies now using it. Learn more about the growth and its implications for businesses and developers." date="2023-11-21" authors="Alex Eagle" href="/blog/bazel-market-2023" tags="Bazel, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-76dd3ec987.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=bcdb9e68a2bef8053d5f9d335109245a" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-76dd3ec987.jpeg" />
    </BlogCard>

    <BlogCard title="Integration testing your container images with Bazel" description="Explore two approaches for migrating Docker Compose tests to Bazel for better integration and test management." date="2023-11-08" authors="Alex Eagle" href="/blog/integration-testing-oci" tags="Containers & OCI, CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-252202200a.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=23edcbf77f14f94fef4aa8724dd55fa5" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-252202200a.jpeg" />
    </BlogCard>

    <BlogCard title="Aspect at BazelCon 2023" description="Discover Aspect's BazelCon updates: bazel lint, bazel-lib 2.0, rules_py, partnership with Chainguard, and more. Watch our talks and explore new features." date="2023-10-30" authors="Alex Eagle" href="/blog/bazelcon-2023" tags="Bazel, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-8357d11a0e.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=f8ccf7c285ead7cc7f9339f4b0f0a44d" alt="" width="2734" height="2890" data-path="images/blog/hashnode/hn-8357d11a0e.jpeg" />
    </BlogCard>

    <BlogCard title="Build Wolfi images with Bazel: Introducing rules_apko" description="Learn about rules_apko, a Bazel plugin for building secure, minimal Wolfi-based container images with reproducible, air-gapped builds." date="2023-10-26" authors="Alex Eagle" href="/blog/rules-apko" tags="Containers & OCI, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-49d35a17e8.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5eb0a2730290b3f083fc3d70869d3c0f" alt="" width="1254" height="836" data-path="images/blog/hashnode/hn-49d35a17e8.jpeg" />
    </BlogCard>

    <BlogCard title="Releasing Bazel rulesets that publish tools" description="Learn how Aspect automates Bazel rule releases, ensuring secure, reproducible toolchains and seamless user experiences, with minimal manual effort." date="2023-10-11" authors="Alex Eagle" href="/blog/releasing-bazel-rulesets" tags="Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-d40b0d724b.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=08061d078f4892e5a1888627385c37fe" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-d40b0d724b.jpeg" />
    </BlogCard>

    <BlogCard title="Automated testing of each commit != CI" description="Explore how microservice architectures hinder true Continuous Integration and why API contracts alone can't prevent integration issues. Learn how to fix it." date="2023-08-13" authors="Alex Eagle" href="/blog/automated-testing-of-each-commit-ci" tags="CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-894764dedd.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=814547b5e217ab01a1b616f28e619276" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-894764dedd.jpeg" />
    </BlogCard>

    <BlogCard title="What's new at Aspect: Summer 2023" description="Check out Aspect's latest updates: new clients, open-source releases, and upcoming conferences. Improving Bazel workflows for the community." date="2023-08-04" authors="Alex Eagle" href="/blog/summer-2023" tags="Company, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-36d0c0a9e1.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6050aab28c8a7506802a9b150679d742" alt="" width="1600" height="1200" data-path="images/blog/hashnode/hn-36d0c0a9e1.jpeg" />
    </BlogCard>

    <BlogCard title="Mechanics of moving an other-repo to the monorepo" description="Learn the step-by-step process of merging projects into a Bazel monorepo, preserving git history, and setting up smooth CI/CD workflows." date="2023-05-18" authors="Alex Eagle" href="/blog/otherrepo-to-monorepo" tags="Monorepo, Migration, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/containers.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=fe4ce250299b50bebca610ca0325eb6c" alt="" width="800" height="533" data-path="images/blog/stock/containers.jpg" />
    </BlogCard>

    <BlogCard title="Introducing rules_oci" description="Discover how rules_oci improves secure container builds with Bazel, offering multi-platform support and code signing." date="2023-05-05" authors="Alex Eagle" href="/blog/rules-oci" tags="Containers & OCI, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-17fbedbfbc.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=a9b0041b22346de4e7918eca7bec7c77" alt="" width="1600" height="1064" data-path="images/blog/hashnode/hn-17fbedbfbc.jpeg" />
    </BlogCard>

    <BlogCard title="Multiple external dependency closures in Bazel" description="Discover strategies for managing dependencies in Bazel monorepos, including single and multiple version approaches, with key trade-offs." date="2023-03-09" authors="Alex Eagle" href="/blog/multiple-deps" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-c88cbf2bbf.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=f5bad3a5cf57b5a48efc32ca7b6b7ac7" alt="" width="1600" height="1200" data-path="images/blog/hashnode/hn-c88cbf2bbf.jpeg" />
    </BlogCard>

    <BlogCard title="Presets for bazelrc" description="Discover how Bazel presets can help configure sensible default options, improve efficiency, and avoid common bugs in new repositories." date="2023-02-27" authors="Alex Eagle" href="/blog/bazelrc-presets" tags="Bazel, Aspect CLI">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-d0f296e46e.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0326b7bdf1127ce560fab3311664806c" alt="" width="1600" height="1020" data-path="images/blog/hashnode/hn-d0f296e46e.jpeg" />
    </BlogCard>

    <BlogCard title="Estimating the effort to build a Bazel CI/CD" description="Learn the key challenges of integrating Bazel into CI/CD pipelines and the effort required." date="2023-02-25" authors="Alex Eagle" href="/blog/estimating-bazel-cicd" tags="CI/CD, Bazel, Migration">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-e7a3fd4726.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=cdb310b654211932ccf941c97c66cacd" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-e7a3fd4726.jpeg" />
    </BlogCard>

    <BlogCard title="Happy Holidays from Aspect: Winter 2022" description="Aspect reflects on a busy 2022: 20+ companies consulted, Aspect Workflows in Alpha, Aspect CLI 1.0 launch, and rules_js rollouts." date="2022-12-19" authors="Alex Eagle" href="/blog/winter-2022" tags="Company, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-619e0c3da5.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1e1934c2307063c856cb6b2f0cdd6265" alt="" width="1600" height="1017" data-path="images/blog/hashnode/hn-619e0c3da5.jpeg" />
    </BlogCard>

    <BlogCard title="Versioning releases from a monorepo" description="Guide to versioning releases from a monorepo, exploring trunk-based development and monoversion strategies for streamlined software development." date="2022-11-22" authors="Alex Eagle" href="/blog/versioning-releases-from-a-monorepo" tags="Releases, Monorepo">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-86bcd6229d.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=41ba384b4855a6330b054145077962a8" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-86bcd6229d.jpeg" />
    </BlogCard>

    <BlogCard title="GitHub Actions Dynamic Matrix" description="Guide to configuring dynamic matrices in GitHub Actions using bash scripts and JSON arrays for flexible job handling." date="2022-10-28" authors="Alex Eagle" href="/blog/github-actions-dynamic-matrix" tags="CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/network-mesh.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0911ebc13499261ebce9979ce56e500d" alt="" width="800" height="533" data-path="images/blog/stock/network-mesh.jpg" />
    </BlogCard>

    <BlogCard title="Moving TypeScript code into a Bazel monorepo" description="Step-by-step guide for migrating TypeScript projects into a Bazel monorepo, ensuring smooth workflow and effective governance." date="2022-09-16" authors="Alex Eagle" href="/blog/moving-typescript-to-bazel-monorepo" tags="TypeScript, Monorepo, Migration, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/code-screen.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=26d6041369d0365dff1cce13ba0ff704" alt="" width="800" height="534" data-path="images/blog/stock/code-screen.jpg" />
    </BlogCard>

    <BlogCard title="Estimating Bazel's Adoption" description="We estimate 600 companies currently use Bazel, with potential growth to 3,750 at full market saturation. Learn more about our methodology." date="2022-09-12" authors="Alex Eagle" href="/blog/estimating-bazel-adoption" tags="Bazel, Migration">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-b6baf650fc.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c8d986031b860a2de63e3b37b38f5b55" alt="" width="1600" height="1199" data-path="images/blog/hashnode/hn-b6baf650fc.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel + TypeScript: faster with Remote Execution" description="See how Bazel's remote execution speeds up TypeScript builds by 8.4x on a 10M LOC project. Explore benchmarks and benefits." date="2022-09-06" authors="Greg Magolan" href="/blog/typescript-with-rbe" tags="TypeScript, Remote Execution, Performance, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-ef46707917.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7c12a148ce4f2dbcaed4fb4a9e323b12" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-ef46707917.jpeg" />
    </BlogCard>

    <BlogCard title="Angular with Bazel" description="Learn how to integrate Angular and Bazel using rules_js for better performance and compatibility." date="2022-08-30" authors="Jason Bedard" href="/blog/angular-with-bazel" tags="JavaScript, TypeScript, Migration, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-1c1e687e2a.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6e8a820ec86a9a9acfbf9be30a034a72" alt="" width="1600" height="1143" data-path="images/blog/hashnode/hn-1c1e687e2a.jpeg" />
    </BlogCard>

    <BlogCard title="Fixing Bazel out-of-memory problems" description="Troubleshoot and fix Bazel's out-of-memory issues in both JVM and system contexts with practical solutions and tips." date="2022-08-20" authors="Alex Eagle" href="/blog/bazel-oom" tags="Bazel, Performance">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-9dab9f15b9.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7c58a1e73d917e5d2c6397d181218beb" alt="" width="1600" height="1068" data-path="images/blog/hashnode/hn-9dab9f15b9.jpeg" />
    </BlogCard>

    <BlogCard title="Why would you want a hermetic C++ toolchain?" description="Bazel is usually thought of as a hermetic build system. But the default behaviour you get with Bazel's C/C++ built-in rules is not hermetic! Why does this matte" date="2022-08-19" authors="Thulio Ferraz Assis" href="/blog/hermetic-c-toolchain" tags="Bazel, Performance">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-e1e90ab1f0.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=63d7d0e919456e90b2ae505ef4c8a1f3" alt="" width="1600" height="1200" data-path="images/blog/hashnode/hn-e1e90ab1f0.jpeg" />
    </BlogCard>

    <BlogCard title="rules_js 1.0.0" description="Upgrade to rules_js 1.0.0 for faster JavaScript build, test, and release tooling under Bazel. Get support from Aspect" date="2022-08-08" authors="Alex Eagle" href="/blog/rulesjs-launch" tags="JavaScript, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-96f18ecb71.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d21eafe3ff9f3d648f4fb66a067c1e4e" alt="" width="1600" height="1280" data-path="images/blog/hashnode/hn-96f18ecb71.jpeg" />
    </BlogCard>

    <BlogCard title="Monorepo Shared Green" description="Learn about the benefits of implementing a \\&#x22;shared green\\&#x22; monobuild model in a monorepo for improved code sharing and consistency" date="2022-08-08" authors="Alex Eagle" href="/blog/monorepo-shared-green" tags="Monorepo, CI/CD">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-22114cf9a4.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d54583a6ac224882752e712c89eedab3" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-22114cf9a4.jpeg" />
    </BlogCard>

    <BlogCard title="Diagnosing Bazel Cache Misses" description="Learn how to diagnose and fix Bazel cache misses by investigating repository rule determinism and file differences between executions" date="2022-06-24" authors="Matt Mackay" href="/blog/diagnose-cache-misses-1" tags="Remote Cache, Performance, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-3ca9b525b0.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d07413b2b703370c58070eb0b8edf043" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-3ca9b525b0.jpeg" />
    </BlogCard>

    <BlogCard title="rules_ts benchmarks" description="Discover the performance benchmarks of rules_ts, comparing ts_project with older rules and vanilla TypeScript compiler for faster builds" date="2022-06-21" authors="Greg Magolan" href="/blog/rules-ts-benchmarks" tags="TypeScript, Performance, JavaScript, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-d5dfbeef88.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c8f14da503810036fdf014af6659a0d6" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-d5dfbeef88.jpeg" />
    </BlogCard>

    <BlogCard title="What's better than a genrule?" description="Learn why genrule is the best rule for your Bazel build process, simplifying command execution and enhancing developer experience" date="2022-06-17" authors="Alex Eagle" href="/blog/genrule-bestrule" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/blueprint.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=9e80970619ab05f3ef6f0a8513dc4907" alt="" width="800" height="450" data-path="images/blog/stock/blueprint.jpg" />
    </BlogCard>

    <BlogCard title="rules_js npm benchmarks" description="Discover the performance benchmarks of rules_js npm tool compared to rules_nodejs and non-Bazel npm tools" date="2022-06-15" authors="Greg Magolan" href="/blog/rulesjs-npm-benchmarks" tags="JavaScript, Performance, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-7588bcce70.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=3a5d87eb7aee9dac1e9ced6769bf6a3e" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-7588bcce70.jpeg" />
    </BlogCard>

    <BlogCard title="Bazel for Frontend: Introducing rules_js" description="Transform your frontend workflow with rules_js: faster builds, simplified tooling, and improved performance. Get started now!" date="2022-06-15" authors="Alex Eagle" href="/blog/rules-js" tags="JavaScript, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-b5daa3a554.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=daf7fccd7c33a1c482a9a360a016030c" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-b5daa3a554.jpeg" />
    </BlogCard>

    <BlogCard title=".bazelrc flags you should enable" description="Discover essential .bazelrc flags for optimal project setup, performance, and debugging." date="2022-04-28" authors="Alex Eagle" href="/blog/bazelrc-flags" tags="Bazel, Performance">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/control-faders.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=2e84fcffa099758a02a3fb61f58e6e71" alt="" width="800" height="533" data-path="images/blog/stock/control-faders.jpg" />
    </BlogCard>

    <BlogCard title="Bazel: Avoiding eager fetches" description="Learn how to identify and prevent eager fetches in Bazel builds, optimizing dependency management for efficient development workflows" date="2022-03-30" authors="Alex Eagle" href="/blog/avoid-eager-fetches" tags="Bazel, Performance">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-ba2d1c6e40.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=3c44ad139b20e6f98f33d33ba3911cd8" alt="" width="1600" height="1068" data-path="images/blog/hashnode/hn-ba2d1c6e40.jpeg" />
    </BlogCard>

    <BlogCard title="Customize Bazel with Aspect CLI plugins" description="Customize Bazel effortlessly with Aspect CLI plugins for tailored developer workflows and enhanced control over Bazel deployments" date="2022-03-17" authors="Alex Eagle" href="/blog/customize-bazel-with-aspect-cli" tags="Aspect CLI, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-e93e7c9b9c.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=060d8ac91890d1d3b084bdc711cf6d2b" alt="" width="4032" height="3024" data-path="images/blog/hashnode/hn-e93e7c9b9c.jpg" />
    </BlogCard>

    <BlogCard title="Deterministic npm dependencies with Bazel" description="Use Bazel with npm for deterministic dependencies, faster builds, reduced CI times, and cost savings; fix non-determinism for efficient development" date="2022-03-13" authors="Greg Magolan" href="/blog/npm-determinism" tags="JavaScript, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-a725fab373.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=bf1cb2f2d555988e3d8467f515e88ef9" alt="" width="1260" height="840" data-path="images/blog/hashnode/hn-a725fab373.jpg" />
    </BlogCard>

    <BlogCard title="Python toolchains in rules_python" description="Bazel is supposed to be repeatable, right? Your teammate runs the tests on her computer and should get the same result as you did. A build from a commit last mo" date="2022-03-11" authors="Thulio Ferraz Assis" href="/blog/python-toolchains" tags="Python, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-2e33cf2afe.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0562ad9f4fe4470a06be27feb022fbc0" alt="" width="1600" height="1200" data-path="images/blog/hashnode/hn-2e33cf2afe.jpeg" />
    </BlogCard>

    <BlogCard title="Documentation in source control" description="Store developer documentation in source control for easy access, versioning, and collaboration, but consider presentation and ease of editing" date="2022-03-10" authors="Alex Eagle" href="/blog/docs-in-vcs" tags="Monorepo, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-228096110f.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=623798a7a66957cf97663cdef8986949" alt="" width="1600" height="1068" data-path="images/blog/hashnode/hn-228096110f.jpeg" />
    </BlogCard>

    <BlogCard title="Principles of a Bazel Migration" description="Successful Bazel migration: prioritize psychology, avoid workflow disruption, change gradually, maintain a ratchet mechanism" date="2022-02-22" authors="Alex Eagle" href="/blog/principles" tags="Migration, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-9c13c0cffe.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=e3d55de96b3fd2fd6525f7f1117e80b3" alt="" width="1600" height="962" data-path="images/blog/hashnode/hn-9c13c0cffe.jpeg" />
    </BlogCard>

    <BlogCard title="Many Python versions, one Bazel build" description="Manage multiple Python versions efficiently in a Bazel build for seamless migration and execution. Achieve this with custom scripts and toolchains" date="2022-01-31" authors="Matt Mackay" href="/blog/many-python-versions-one-bazel-build" tags="Python, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-ec381367a0.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=fb6af4acf0dd5f51c0952bfb9384228f" alt="" width="1600" height="900" data-path="images/blog/hashnode/hn-ec381367a0.jpeg" />
    </BlogCard>

    <BlogCard title="10-20x speedup for TypeScript transpilation in Bazel" description="Achieve 10-20x faster TypeScript transpilation in Bazel using the new `ts_project` with a customizable transpiler like SWC" date="2022-01-06" authors="Alex Eagle" href="/blog/typescript-speedup" tags="TypeScript, Performance, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-102bda9ac3.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7e3bdafb701907d085bbd7e5479c1929" alt="" width="1600" height="1067" data-path="images/blog/hashnode/hn-102bda9ac3.jpeg" />
    </BlogCard>

    <BlogCard title="Adopting Bazel's new package manager" description="Simplify Bazel package management with the new \\&#x22;bzlmod\\&#x22; feature for easier dependency handling and improved user experience" date="2021-12-19" authors="Alex Eagle" href="/blog/bzlmod" tags="Bazel, Migration">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-84079ecc94.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=dc0a7ccdb49c09b38dd83767871e2ceb" alt="" width="1600" height="1064" data-path="images/blog/hashnode/hn-84079ecc94.jpeg" />
    </BlogCard>

    <BlogCard title="Aspect Build, built on Bazel" description="Aspect Build offers Bazel solutions, including a rules docsite, BUILD file automation, and a more user-friendly CLI. Explore more at aspect.build" date="2021-11-17" authors="Alex Eagle" href="/blog/aspect-build" tags="Bazel, Company">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/circuit-board.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=011b528d80219d61336df3f6169eee73" alt="" width="800" height="533" data-path="images/blog/stock/circuit-board.jpg" />
    </BlogCard>

    <BlogCard title="Configuring Bazel's Downloader" description="Configure Bazel's downloader for efficient, secure package management, improving resilience and enhancing security" date="2021-11-11" authors="Alex Eagle" href="/blog/configuring-bazels-downloader" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/server-racks.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=060f00604db248271aa008f5e3eaadb8" alt="" width="800" height="449" data-path="images/blog/stock/server-racks.jpg" />
    </BlogCard>

    <BlogCard title="Stamping Bazel builds with selective delivery" description="Stamping Bazel builds for selective delivery, ensuring version control integration and efficient artifact release in CI/CD pipelines" date="2021-11-10" authors="Alex Eagle" href="/blog/stamping-bazel-builds-with-selective-delivery" tags="Selective Delivery, Releases, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/warehouse-parcels.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=fabfe8dfe27ca44330870368b1d6758d" alt="" width="800" height="533" data-path="images/blog/stock/warehouse-parcels.jpg" />
    </BlogCard>

    <BlogCard title="Bazel can write to the source folder!" description="Bazel can write to the source folder for specific needs, using `bazel run` and `bazel test` to maintain consistency" date="2021-11-10" authors="Alex Eagle" href="/blog/bazel-can-write-to-the-source-folder" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/laptop-writing.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=fa02efdb4b199fc3c4f14849af5c40c0" alt="" width="800" height="533" data-path="images/blog/stock/laptop-writing.jpg" />
    </BlogCard>

    <BlogCard title="Bazel: what you give, what you get" description="Bazel: Efficient, incremental, and correct outputs by describing dependencies accurately. Keep your outputs up-to-date with minimal work" date="2021-06-10" authors="Alex Eagle" href="/blog/bazel-what-you-give-what-you-get" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/scales.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c3b82a42203f6fd068e50c8610aa9e92" alt="" width="800" height="533" data-path="images/blog/stock/scales.jpg" />
    </BlogCard>

    <BlogCard title="What is a build system and what is CI?" description="Discover the essence of build systems and CI in software development, unraveling their interconnected roles and impact on development processes" date="2021-06-01" authors="Alex Eagle" href="/blog/what-is-a-build-system-and-what-is-ci" tags="CI/CD, Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/stock/construction.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=bf94f8005eb965dcedc8b66da772f6f4" alt="" width="800" height="533" data-path="images/blog/stock/construction.jpg" />
    </BlogCard>

    <BlogCard title="CBOI: Continuous Build, Occasional Integration" description="\\&#x22;Continuous Build, Occasional Integration\\&#x22; fails in software development and how to switch to effective Continuous Integration" date="2021-05-10" authors="Alex Eagle" href="/blog/cboi-continuous-build-occasional-integration" tags="CI/CD, Monorepo">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-89d02e6ca2.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6bb965e49720cb1efbeb65127114c3be" alt="" width="1437" height="958" data-path="images/blog/hashnode/hn-89d02e6ca2.jpeg" />
    </BlogCard>

    <BlogCard title="Things a program must not do under Bazel" description="Ensure Bazel program compliance: no implicit environment assumptions, write only to output directory, avoid stdin/stdout reliance, and more" date="2020-04-29" authors="Alex Eagle" href="/blog/things-a-program-must-not-do-under-bazel" tags="Bazel">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-47e1e69412.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=ac38857ed53f95c3e7add3744bd448ba" alt="" width="5184" height="3456" data-path="images/blog/hashnode/hn-47e1e69412.jpeg" />
    </BlogCard>
  </div>
</Section>
