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

# Bazel Remote Cache, Free to Start | Aspect

> A Bazel remote cache shared by CI and every developer, over the standard Remote Execution API. Free on Aspect Cloud for 10 users and 1 TB of cache egress a month, or isolated on Aspect Enterprise.

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

export const CTA = ({title, subtitle, primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#"}) => <section className="w-full flex justify-center px-4 py-16 md:py-20">
    <div className="w-full rounded-2xl text-white flex flex-col md:flex-row items-center justify-center gap-10 md:gap-16 p-8 md:p-12 text-center md:text-left" style={{
  maxWidth: "1140px",
  background: "linear-gradient(135deg, #1a3a5c 0%, #176ACC 100%)"
}}>
      <div>
        <h2 className="text-2xl md:text-3xl font-semibold tracking-tight">{title}</h2>
        {subtitle && <div className="mt-3 text-blue-100 text-base">{subtitle}</div>}
      </div>
      <div className="flex flex-wrap gap-3 shrink-0 justify-center">
        {primaryCta && <a href={primaryHref} className="inline-flex items-center px-6 py-3 rounded-lg bg-white text-blue-700 font-semibold hover:bg-blue-50 transition whitespace-nowrap shadow-sm">
            {primaryCta}
          </a>}
        {secondaryCta && <a href={secondaryHref} className={`inline-flex items-center px-6 py-3 rounded-lg border border-blue-300/50 text-white font-semibold hover:bg-blue-700/30 transition whitespace-nowrap ${secondaryHref === "/request-demo" ? "demo-gradient-btn" : ""}`}>
            {secondaryCta}
          </a>}
      </div>
    </div>
  </section>;

export const MediaCard = ({title, description, href, linkText = "Learn more", external = false, children}) => {
  const Tag = href ? "a" : "div";
  const tagProps = href ? {
    href,
    ...external ? {
      target: "_blank",
      rel: "noopener noreferrer"
    } : {}
  } : {};
  return <Tag {...tagProps} className="group flex flex-col rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50 overflow-hidden hover:shadow-md hover:border-blue-200 dark:hover:border-blue-700 transition-all duration-200">
      {children && <div className="media-card-image aspect-[16/10] overflow-hidden bg-zinc-50 dark:bg-zinc-900">
          {children}
        </div>}
      <div className="flex flex-col flex-1 p-6">
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors">
          {title}
        </h3>
        {description && <p className="feature-card-desc text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed flex-1">{description}</p>}
        {linkText && href && <span className="inline-flex items-center mt-4 text-sm text-blue-600 dark:text-blue-400 font-semibold group-hover:underline underline-offset-2">
            {linkText} {external ? "↗" : "→"}
          </span>}
      </div>
    </Tag>;
};

export const FeatureCard = ({title, description, href, children}) => {
  const Tag = href ? "a" : "div";
  const tagProps = href ? {
    href
  } : {};
  return <Tag {...tagProps} className={`group flex flex-col p-6 rounded-xl border border-zinc-200 dark:border-zinc-700/60 bg-white dark:bg-zinc-800/50 ${href ? "hover:shadow-md hover:border-blue-200 dark:hover:border-blue-700 transition-all duration-200" : ""}`}>
      {children && <div className="feature-card-icon mb-5 flex items-center justify-center rounded-xl bg-blue-50 dark:bg-blue-900/20 border border-blue-100 dark:border-blue-800/30" style={{
    width: "4rem",
    height: "4rem"
  }}>
          {children}
        </div>}
      <h3 className={`text-lg font-semibold text-zinc-900 dark:text-white ${href ? "group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors" : ""}`}>
        {title}
      </h3>
      {description && <p className="feature-card-desc text-sm text-zinc-500 dark:text-zinc-400 leading-relaxed">{description}</p>}
    </Tag>;
};

export const FeatureGrid3 = ({children}) => <div className="marketing-grid-3">{children}</div>;

export const FeatureGrid2 = ({children}) => <div className="marketing-grid-2">{children}</div>;

export const SectionHeader = ({title, subtitle, centered = true, label}) => <div className={`mb-12 ${centered ? "text-center" : ""}`}>
    {label && <p className="text-xs font-semibold tracking-widest text-blue-600 dark:text-blue-400 uppercase mb-3">
        {label}
      </p>}
    <h2 className="text-3xl md:text-5xl font-semibold text-zinc-900 dark:text-white tracking-tight">{title}</h2>
    {subtitle && <div className={`subtitle-gap text-lg md:text-xl text-zinc-500 dark:text-zinc-300 leading-relaxed ${centered ? "mx-auto" : ""}`} style={{
  marginTop: "1rem",
  maxWidth: centered ? "700px" : "none"
}}>
        {subtitle}
      </div>}
  </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, eyebrow, heroImageClassName = "", primaryCta, primaryHref = "#", secondaryCta, secondaryHref = "#", note, 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>}
          {eyebrow && <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400 mb-4">
              {eyebrow}
            </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>}
          {(primaryCta || secondaryCta) && <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>}
          {note && <div className="mt-4 text-sm text-center text-zinc-500 dark:text-zinc-400">{note}</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>}
            {eyebrow && <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400 mb-4">
                {eyebrow}
              </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>
            {note && <div className="mt-4 text-sm text-zinc-500 dark:text-zinc-400">{note}</div>}
          </div>
          {children && <div className={`flex-1 min-w-0 hero-image ${heroImageClassName}`}>
              {children}
            </div>}
        </div>}
    </div>
  </section>;

<MarketingPage />

<Hero eyebrow="Aspect Cloud and Enterprise" title={"Bazel remote cache,\nshared by CI and every developer"} subtitle="One cache over the standard Remote Execution API, so any REv2 client works." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Try Aspect Enterprise" secondaryHref="/trial" centered={false}>
  <img noZoom src="https://mintcdn.com/aspectbuild/4wAijf_e0qg5Bve0/images/marketing/illustrations/aspect-cloud-architecture-v2.svg?fit=max&auto=format&n=4wAijf_e0qg5Bve0&q=85&s=673d6e2447200ebcd9eb83425ba93211" alt="Developer laptops and CI connecting to Aspect Cloud, which runs a shared remote cache and the Build Results UI" width="720" height="480" data-path="images/marketing/illustrations/aspect-cloud-architecture-v2.svg" />
</Hero>

<Section>
  <FeatureGrid2>
    <div className="flex flex-col p-8 rounded-xl border-2 border-blue-600 bg-white dark:bg-zinc-800">
      <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">Aspect Cloud</div>
      <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Ready the moment you sign up</h3>

      <ul className="check-list mt-4 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
        <li>One cache shared by CI and developer machines</li>
        <li>Log in, point Bazel at it, and share hits from the first build</li>
        <li>1 TB of cache egress free every month</li>
        <li>Uploads always free</li>
      </ul>

      <div className="mt-auto pt-6">
        <a href="https://signup.aspect.build/" className="flex items-center justify-center px-6 py-3 rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition">Get started for free</a>
      </div>
    </div>

    <div className="flex flex-col p-8 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
      <div className="text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400">Aspect Enterprise</div>
      <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Isolated, next to your CI runners</h3>

      <ul className="check-list mt-4 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
        <li>An isolated deployment no other customer shares</li>
        <li>On the same private network as your runners, so CI reads and writes never cross the internet</li>
        <li>Hosted by Aspect or in your own AWS or GCP account</li>
        <li>Developers share CI's cache or have their own</li>
      </ul>

      <div className="flex items-center gap-6 mt-5">
        <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/cloud/aws.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5a64667baf8f5006d9f63baef181286b" alt="AWS" style={{ height: "1.5rem", width: "auto" }} width="81" height="49" data-path="images/marketing/cloud/aws.svg" />

        <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/cloud/google-cloud.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=512eb90a4decf03fd39a9842ff56a9b1" alt="Google Cloud" style={{ height: "1.5rem", width: "auto" }} width="518" height="96" data-path="images/marketing/cloud/google-cloud.png" />
      </div>

      <div className="mt-auto pt-6">
        <a href="/trial" className="flex items-center justify-center px-6 py-3 rounded-lg border border-zinc-300 dark:border-zinc-600 text-zinc-900 dark:text-white font-semibold hover:bg-zinc-50 dark:hover:bg-zinc-700 transition">Start a 30-day trial</a>
      </div>
    </div>
  </FeatureGrid2>
</Section>

<Section gray>
  <SectionHeader title="How remote caching works" subtitle="When Bazel cannot find build artifacts locally, it checks the remote cache before triggering a potentially expensive rebuild. If the artifact is available, it's downloaded and used directly. If not, Bazel builds locally as usual, then uploads the result so future builds retrieve it instead of rebuilding." />

  <FeatureGrid3>
    <FeatureCard title="REv2 standard protocol" description="Fully compliant with the Bazel Remote Execution Protocol v2 over gRPC. Any REv2 client works, and you're never locked in.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/chain.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=eb48ca77026766b251216ae33176625f" alt="" width="40" height="40" data-path="images/marketing/icons/chain.svg" />
    </FeatureCard>

    <FeatureCard title="Build without the Bytes" description="On CI, Bazel's remote_download_minimal mode downloads only what local actions need, for faster builds and less cache egress.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/fast.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=a631c8f2127105e4112db8e0a4ccc641" alt="" width="48" height="49" data-path="images/marketing/icons/fast.svg" />
    </FeatureCard>

    <FeatureCard title="Scales with your monorepo" description="Horizontally scalable storage with high availability, operated and tuned by Aspect engineers, with a 99.9% uptime target on Aspect Cloud and a 99.9% uptime SLA in standard Aspect Enterprise agreements.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/Hosting.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=be200f157c3532a4341c82dd642a3c4c" alt="" width="32" height="32" data-path="images/marketing/icons/Hosting.svg" />
    </FeatureCard>

    <FeatureCard title="Developer-facing cache" description="Open the cache to developer machines too. Local development gets remote cache hits, so pulling main doesn't mean rebuilding it. On Aspect Enterprise, developers can share CI's cache or have their own.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/protect.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=af5818d5725923799e54382c188d5256" alt="" width="40" height="40" data-path="images/marketing/icons/protect.svg" />
    </FeatureCard>

    <FeatureCard title="Every miss, explained" description="Each build's Cache tab in the Build Results UI shows the hit rate and why each miss happened: digest mismatch, not cached, or unconditional execution. On Aspect Enterprise, every deployment also ships with infrastructure dashboards for cache performance.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/Coverage.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=306ae317088aaa2ae5630a60ec44bdba" alt="" width="48" height="48" data-path="images/marketing/icons/Coverage.svg" />
    </FeatureCard>

    <FeatureCard title="Find misses from your terminal" description="aspect cache diff, in the free Aspect CLI, lists the actions that missed the cache and the tests they affect, without running any tests.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/filters.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=291b4db68d69e6a8e7cd83b45b61837f" alt="" width="48" height="49" data-path="images/marketing/icons/filters.svg" />
    </FeatureCard>
  </FeatureGrid3>
</Section>

<Section>
  <SectionHeader title="Pricing you can read" />

  <div className="meter-panel rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
    <div className="p-6 text-center">
      <div className="compare-eyebrow mb-2">Free</div>
      <div className="text-4xl font-semibold tracking-tight tabular-nums text-zinc-900 dark:text-white">\$0</div>
      <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">up to 10 users and 1 TB\* of cache egress a month free</div>
    </div>

    <div className="p-6 text-center">
      <div className="compare-eyebrow mb-2">Per user</div>
      <div className="text-4xl font-semibold tracking-tight tabular-nums text-zinc-900 dark:text-white">\$12</div>
      <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">per user per month past 10 users</div>
    </div>

    <div className="p-6 text-center">
      <div className="compare-eyebrow mb-2">Cache egress</div>
      <div className="text-4xl font-semibold tracking-tight tabular-nums text-zinc-900 dark:text-white">\$0.15</div>
      <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">per GB of cache egress past 1 TB a month</div>
    </div>
  </div>

  <div className="mt-4 text-center text-sm text-zinc-500 dark:text-zinc-400">
    Uploads are always free.
  </div>

  <div className="mt-2 text-center text-sm text-zinc-500 dark:text-zinc-400">
    \* Your first month includes the full free allowance, no credit card needed. After that, without a card, it's 100 GB of cache egress and 10 million build events a month; add a card to keep the full allowance. The card requirement is there to prevent abuse of the free allowance.
  </div>

  <div className="mt-8 text-center">
    <a href="/pricing" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">See pricing →</a>
  </div>
</Section>

<Section gray>
  <SectionHeader title="The first half of fast CI" subtitle="On Aspect Enterprise, the remote cache pairs with warm, Bazel-tuned CI runners for most of the speedup teams are looking for, and with remote execution for when you're ready for it." />

  <FeatureGrid2>
    <MediaCard title="CI runners" description="Aspect's runners keep Bazel warm between jobs, registered with GitHub Actions, Buildkite, GitLab or CircleCI, on x86, Arm or GPU hardware." href="/platform/ci-runners">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/ci-img.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=2a5d51dece056cdf6c64c8104a3d80d9" alt="Aspect CI runners" width="1284" height="720" data-path="images/marketing/product/ci-img.avif" />
    </MediaCard>

    <MediaCard title="Remote execution" description="Spread a build's actions across Linux workers on x86, Arm and GPU, and across macOS workers, with fleets that scale to zero when idle." href="/platform/remote-execution">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/Remote-img_1.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c3f0392787bfb2fea1eec4f420cdb166" alt="Remote build execution" width="1296" height="720" data-path="images/marketing/product/Remote-img_1.avif" />
    </MediaCard>
  </FeatureGrid2>

  <div className="mt-8 text-center text-sm text-zinc-500 dark:text-zinc-400">
    Remote execution and CI runners come to Aspect Cloud in early 2027. <a href="/contact?topic=early-access" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Join the early access list →</a>
  </div>
</Section>

<CTA title="Faster warm builds, shared by CI and every developer" subtitle="Free on Aspect Cloud, or isolated next to your CI runners on Aspect Enterprise." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Try Aspect Enterprise" secondaryHref="/trial" />


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.