> ## 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.

# Remote Cache for Bazel

> A fast, scalable Bazel remote cache, REv2-compliant and deployed inside your own cloud account. Build artifacts never cross the internet, and there is no usage billing.

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 CustomerLogos = ({title = "TRUSTED BY LEADING ENGINEERING TEAMS", children}) => <section className="w-full flex justify-center px-4 py-10">
    <div className="w-full" style={{
  maxWidth: "1140px"
}}>
      {title && <div className="block text-center text-xs font-semibold tracking-widest text-zinc-400 dark:text-zinc-500 uppercase mb-12">
          {title}
        </div>}
      <div className="customer-logos-grid flex flex-wrap justify-center items-center gap-x-10 gap-y-8 md:gap-x-14">
        {children}
      </div>
    </div>
  </section>;

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 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-4xl 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, 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="Remote Cache" subtitle="A fast, scalable remote cache, included in every Aspect Workflows deployment. It runs inside your own cloud account, right next to your CI runners, so artifacts never cross the internet and there is no usage billing." primaryCta="Start a Free Trial" primaryHref="/trial" secondaryCta="Request a Demo" secondaryHref="/request-demo" centered={false} />

<Section gray>
  <div className="max-w-3xl mx-auto text-center space-y-6">
    <div className="h-px bg-zinc-300 dark:bg-zinc-600 w-full" />

    <p className="text-lg text-zinc-700 dark:text-zinc-300 italic leading-relaxed">
      A remote cache is only as fast as the network between it and your builds. Hosted caches put the internet in that path: every artifact pays round-trip latency, and every byte pays egress.
    </p>

    <p className="text-lg text-zinc-700 dark:text-zinc-300 italic leading-relaxed">
      Aspect deploys the cache in your VPC, colocated with your CI runners. Reads and writes stay on your network, at your network's speed.
    </p>

    <div className="h-px bg-zinc-300 dark:bg-zinc-600 w-full" />
  </div>
</Section>

<Section>
  <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="Supports Bazel's remote_download_minimal mode: fetch only the artifacts strictly required to complete the build, typically just the leaf nodes.">
      <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 under our SLA.">
      <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="Cache observability" description="Dashboards track hit rates, throughput, and storage over time, so you catch performance regressions and validate optimizations.">
      <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="Developer-facing cache" description="Optionally expose the cache to developer machines to accelerate local builds. Authentication via your SSO provider using OIDC/OAuth, with fine-grained authorization like read-only access for end users.">
      <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="No usage billing" description="The cache runs on your cloud account. You pay your provider for storage and compute; we never meter your builds.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/cloud.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=acaa74dfc7233d60a896de1d6ec99de1" alt="" width="24" height="24" data-path="images/marketing/icons/cloud.svg" />
    </FeatureCard>
  </FeatureGrid3>
</Section>

<Section gray>
  <SectionHeader title="Self-hosted on your cloud" subtitle="Deployed into your own AWS or GCP account, fully managed by Aspect engineers. Your artifacts never leave your network." />

  <div className="customer-logos-grid flex flex-wrap justify-center items-center gap-x-14 gap-y-8 py-4">
    <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" className="customer-logo" 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" className="customer-logo" width="518" height="96" data-path="images/marketing/cloud/google-cloud.png" />
  </div>
</Section>

<Section>
  <SectionHeader title="The first half of fast CI" subtitle="The remote cache pairs with warm, Bazel-tuned CI runners for most of the speedup teams are looking for. And remote execution is in your deployment from day one for when you're ready for it." />

  <div className="flex flex-wrap justify-center gap-4">
    <a href="/platform/ci-runners" 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">
      CI Runners →
    </a>

    <a href="/platform/remote-execution" 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">
      Remote Execution →
    </a>
  </div>
</Section>

<CTA title="Faster warm builds, on your own cloud" subtitle="The remote cache ships in every Aspect Workflows deployment." primaryCta="Start a Free Trial" primaryHref="/trial" secondaryCta="Request a Demo" secondaryHref="/request-demo" />
