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

# Aspect Workflows Pricing: Free, Pay as you go and Enterprise

> Aspect Workflows scales from one developer to the whole company. Aspect Cloud is free for up to 10 users, 1 TB of cache egress and 100 million build events a month; Pay as you go starts at $0 and adds $12 per user per month, $0.15 per GB and $1.50 per million build events past that. Aspect Enterprise is an isolated deployment with remote execution and CI runners today; request a 30-day trial of Aspect Enterprise.

export const AspectCloudPricingCalculator = () => {
  const FREE_USERS = 10;
  const FREE_GB = 1000;
  const PER_USER = 12;
  const PER_GB = 0.15;
  const FREE_MILLION_EVENTS = 100;
  const PER_MILLION_EVENTS = 1.5;
  const MAX_USERS = 2000;
  const [userPos, setUserPos] = useState(0);
  const users = Math.round(FREE_USERS * Math.pow(MAX_USERS / FREE_USERS, userPos));
  const [pos, setPos] = useState(0);
  const tb = Math.pow(10, 2 * pos * pos);
  const [evPos, setEvPos] = useState(0);
  const millionEvents = FREE_MILLION_EVENTS * Math.pow(10, 2 * evPos * evPos);
  const extraUsers = Math.max(0, users - FREE_USERS);
  const extraGb = Math.max(0, Math.round(tb * 1000) - FREE_GB);
  const userCost = extraUsers * PER_USER;
  const egressCost = extraGb * PER_GB;
  const extraMillionEvents = Math.max(0, Math.round(millionEvents) - FREE_MILLION_EVENTS);
  const eventsCost = extraMillionEvents * PER_MILLION_EVENTS;
  const total = userCost + egressCost + eventsCost;
  const events = m => m < 1000 ? Math.round(m) + " million" : (m / 1000).toFixed(m < 10000 ? 1 : 0) + " billion";
  const money = n => "$" + n.toLocaleString("en-US", {
    minimumFractionDigits: 0,
    maximumFractionDigits: 2
  });
  const label = "text-sm font-semibold text-zinc-900 dark:text-white";
  const value = "text-sm font-semibold text-blue-600 dark:text-blue-400";
  const note = "mt-1 text-xs text-zinc-500 dark:text-zinc-400";
  return <div className="p-6 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800/50">
      <div className="text-sm font-semibold text-zinc-900 dark:text-white">Estimate your monthly cost</div>
      <div className="mt-5 grid gap-6 md:grid-cols-3">
        <div>
          <div className="flex items-baseline justify-between">
            <label htmlFor="calc-users" className={label}>Users</label>
            <span className={value}>{users.toLocaleString("en-US")}</span>
          </div>
          <input id="calc-users" type="range" min={0} max={1} step={0.001} value={userPos} onChange={e => setUserPos(Number(e.target.value))} className="mt-2 w-full" style={{
    accentColor: "#2563eb"
  }} />
          <div className={note}>First {FREE_USERS} free, then {money(PER_USER)} / user / month</div>
        </div>
        <div>
          <div className="flex items-baseline justify-between">
            <label htmlFor="calc-egress" className={label}>Cache egress a month</label>
            <span className={value}>{tb < 10 ? tb.toFixed(1) : Math.round(tb)} TB</span>
          </div>
          <input id="calc-egress" type="range" min={0} max={1} step={0.001} value={pos} onChange={e => setPos(Number(e.target.value))} className="mt-2 w-full" style={{
    accentColor: "#2563eb"
  }} />
          <div className={note}>First 1 TB free*, then {money(PER_GB)} / GB (1 TB = 1,000 GB)</div>
        </div>
        <div>
          <div className="flex items-baseline justify-between">
            <label htmlFor="calc-events" className={label}>Build events a month</label>
            <span className={value}>{events(millionEvents)}</span>
          </div>
          <input id="calc-events" type="range" min={0} max={1} step={0.001} value={evPos} onChange={e => setEvPos(Number(e.target.value))} className="mt-2 w-full" style={{
    accentColor: "#2563eb"
  }} />
          <div className={note}>First {FREE_MILLION_EVENTS} million free*, then {money(PER_MILLION_EVENTS)} / million</div>
        </div>
      </div>
      <div className="mt-6 pt-5 border-t border-zinc-200 dark:border-zinc-700 flex flex-wrap items-baseline justify-between gap-3">
        <div className="text-sm text-zinc-600 dark:text-zinc-400">
          {extraUsers} × {money(PER_USER)} + {extraGb.toLocaleString("en-US")} GB × {money(PER_GB)} + {extraMillionEvents.toLocaleString("en-US")} million events × {money(PER_MILLION_EVENTS)}
        </div>
        <div>
          <span className="price-mono text-3xl font-semibold text-zinc-900 dark:text-white">{"$" + Math.round(total).toLocaleString("en-US")}</span>
          <span className="text-zinc-500 dark:text-zinc-400"> / month</span>
        </div>
      </div>
    </div>;
};

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 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-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 Workflows pricing" title="From one developer to the whole company" subtitle="Start at $0 on Aspect Cloud, pay for usage past the free allowance as you grow, and move to Aspect Enterprise when you need remote execution, CI runners or infrastructure of your own. Your builds and the Aspect CLI stay the same the whole way." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Start a 30-day trial" secondaryHref="/trial" centered />

<Section>
  <div className="ladder">
    <div>
      <div className="ladder-step">1</div>

      <div className="relative flex flex-col flex-1 p-8 rounded-xl border-2 border-blue-600 bg-white dark:bg-zinc-800 shadow-md tier-lift">
        <span className="tier-pill px-3 py-0.5 rounded-full bg-blue-600 text-white text-xs font-semibold whitespace-nowrap">Most teams start here</span>
        <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">Free</h3>

        <div className="mt-2 tier-headline">
          <span className="text-4xl price-mono font-semibold text-zinc-900 dark:text-white">\$0</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          No credit card to start.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          For individuals and small teams.
        </div>

        <ul className="check-list mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
          <li>Up to 10 users</li>
          <li>Up to 1 TB of cache egress a month\*</li>
          <li>Up to 100 million build events a month\*</li>
          <li>Free uploads</li>
          <li><a href="/platform/remote-cache" className="text-blue-600 dark:text-blue-400 hover:underline">Remote cache</a></li>
          <li><a href="/platform/web-ui" className="text-blue-600 dark:text-blue-400 hover:underline">Build Results UI</a></li>
          <li><a href="https://slack.aspect.build" target="_blank" rel="noopener noreferrer" className="text-blue-600 dark:text-blue-400 hover:underline">Community Slack</a></li>
          <li>Email support</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 shadow-sm">
            Get started for free
          </a>
        </div>
      </div>
    </div>

    <div className="ladder-label">Past the free allowance</div>

    <div>
      <div className="ladder-step">2</div>

      <div className="flex flex-col flex-1 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 Cloud</div>
        <h3 className="mt-2 text-xl font-bold text-zinc-900 dark:text-white">Pay as you go</h3>

        <div className="mt-2 tier-headline">
          <span className="text-2xl font-semibold tracking-tight text-zinc-900 dark:text-white">Usage-based</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          No base fee.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          Pay only for what you use past the free allowance.
        </div>

        <div className="mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700">
          <div className="text-sm font-semibold text-zinc-900 dark:text-white mb-3">Everything in Free, plus:</div>

          <ul className="check-list space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
            <li>Users past 10 at \$12 / user / month, from your second month</li>
            <li>Cache egress past 1 TB at \$0.15 / GB</li>
            <li>Build events past 100 million at \$1.50 / million</li>
          </ul>
        </div>

        <div className="mt-auto pt-6">
          <a href="#metering" 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-800 transition">
            See how metering works
          </a>
        </div>
      </div>
    </div>

    <div className="ladder-label">Need execution or isolation?</div>

    <div>
      <div className="ladder-step">3</div>

      <div className="flex flex-col flex-1 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">Enterprise</h3>

        <div className="mt-2 tier-headline">
          <span className="text-2xl font-semibold tracking-tight text-zinc-900 dark:text-white">Annual platform fee</span>
        </div>

        <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
          Based on your configuration.
        </div>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          An isolated deployment: infrastructure and data no other customer shares, hosted by Aspect or self-hosted in your AWS or GCP account.
        </div>

        <div className="mt-3 text-sm">
          <a href="/docs/aspect-workflows/enterprise/deployment-options/hosted" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Hosted by Aspect →</a>
          <span className="text-zinc-400 dark:text-zinc-500"> · </span>
          <a href="/docs/aspect-workflows/enterprise/deployment-options/self-hosted" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Self-hosted →</a>
          <span className="text-zinc-400 dark:text-zinc-500"> · </span>
          <a href="#enterprise-pricing" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">How it's priced →</a>
        </div>

        <ul className="check-list mt-6 pt-6 border-t border-zinc-200 dark:border-zinc-700 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
          <li><a href="/platform/remote-execution" className="text-blue-600 dark:text-blue-400 hover:underline">Remote execution</a> on Linux (x86, Arm, GPU) and macOS</li>
          <li><a href="/platform/ci-runners" className="text-blue-600 dark:text-blue-400 hover:underline">CI runners</a> on Linux (x86, Arm, GPU), any AWS or GCP instance type</li>
          <li><a href="/platform/selective-delivery" className="text-blue-600 dark:text-blue-400 hover:underline">Selective delivery</a></li>
          <li>SSO, with SCIM provisioning coming soon</li>
          <li>Air-gapped and GovCloud</li>
          <li>Slack channel with Aspect Bazel experts and a dedicated support engineer</li>
          <li>24/7 on-call and a 99.9% uptime SLA</li>
        </ul>

        <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400">
          <span className="font-semibold text-zinc-900 dark:text-white">Also available:</span> private endpoints, VPC peering, your own DNS domain, and remote execution workers on your own hardware. <a href="#enterprise" className="text-blue-600 dark:text-blue-400 hover:underline">See all →</a>
        </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-800 transition">
            Start a 30-day trial
          </a>

          <div className="mt-3 text-center text-sm text-zinc-500 dark:text-zinc-400">
            or <a href="/contact" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">talk to us</a>
          </div>
        </div>
      </div>
    </div>
  </div>

  <div className="mt-6 text-sm text-zinc-500 dark:text-zinc-400">
    \* Your first month includes the full free allowance of 1 TB of egress and 100 million build events, 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-10 p-5 rounded-xl border-2 border-dashed border-zinc-300 dark:border-zinc-600 text-center text-zinc-700 dark:text-zinc-300">
    Same <code>bazel</code>, same Aspect CLI, same BUILD files. Moving to Enterprise changes endpoints and credentials, not your build.
  </div>

  <div className="mt-4 text-center text-sm">
    <a href="/docs/aspect-workflows/platform/choosing" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Compare offerings →</a>
  </div>
</Section>

<Section gray id="metering">
  <SectionHeader title="How Aspect Cloud metering works" subtitle="Free covers up to 10 users, 1 TB of cache egress and 100 million build events a month. Pay as you go meters each past that. Uploads are free." />

  <div className="meter-panel meter-4 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">Per user</div>
      <div className="text-4xl price-mono font-semibold 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 price-mono font-semibold 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 (1 TB = 1,000 GB)</div>
    </div>

    <div className="p-6 text-center">
      <div className="compare-eyebrow mb-2">Build events</div>
      <div className="text-4xl price-mono font-semibold text-zinc-900 dark:text-white">\$1.50</div>
      <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">per million build events past 100 million a month</div>
    </div>

    <div className="p-6 text-center">
      <div className="compare-eyebrow mb-2">Uploads</div>
      <div className="text-4xl price-mono font-semibold text-zinc-900 dark:text-white">\$0</div>
      <div className="mt-1 text-sm text-zinc-500 dark:text-zinc-400">uploads, unlimited on every tier</div>
    </div>
  </div>

  <div className="mt-4 text-center text-sm text-zinc-500 dark:text-zinc-400">
    Egress is data downloaded from the cache. Build events are the events Bazel streams to the Build Results UI. Both are counted per month.
  </div>

  <div className="mt-8">
    <AspectCloudPricingCalculator />
  </div>
</Section>

<Section id="compare">
  <SectionHeader title="What differs between plans" />

  <div className="compare-anchors text-sm">
    <a href="#compare-usage" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Usage</a>
    <a href="#compare-remote-cache" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Remote cache</a>
    <a href="#compare-build-results" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Build Results UI</a>
    <a href="#compare-remote-execution" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Remote execution</a>
    <a href="#compare-ci-runners" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">CI runners and delivery</a>
    <a href="#compare-identity" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Identity and network</a>
    <a href="#compare-support" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Support</a>
    <a href="#compare-open-source" className="text-zinc-500 dark:text-zinc-400 hover:text-blue-600 dark:hover:text-blue-400 transition">Free on every plan</a>
  </div>

  <div className="compare-wrap">
    <table className="compare-table w-full text-sm border-collapse" style={{ minWidth: "560px", tableLayout: "fixed" }}>
      <colgroup>
        <col className="compare-label-col" />

        <col />

        <col />

        <col />
      </colgroup>

      <thead>
        <tr>
          <th className="py-3 px-4" />

          <th className="text-center py-3 px-4 align-bottom"><div className="compare-eyebrow">Aspect Cloud</div><div className="font-semibold text-zinc-900 dark:text-white">Free</div><div className="compare-sub">\$0</div></th>
          <th className="text-center py-3 px-4 align-bottom"><div className="compare-eyebrow">Aspect Cloud</div><div className="font-semibold text-zinc-900 dark:text-white">Pay as you go</div><div className="compare-sub">\$0 to start</div></th>
          <th className="text-center py-3 px-4 align-bottom"><div className="compare-eyebrow">Aspect Enterprise</div><div className="font-semibold text-zinc-900 dark:text-white">Enterprise</div><div className="compare-sub">Annual platform fee</div></th>
        </tr>
      </thead>

      <tbody id="compare-usage" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4">Usage</td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">Users</td><td className="text-center py-2 px-4">Up to 10</td><td className="text-center py-2 px-4">Unlimited<br />\$12 / user / month past 10</td><td className="text-center py-2 px-4">Unlimited</td></tr>
        <tr><td className="py-2 px-4">Cache egress</td><td className="text-center py-2 px-4">Up to 1 TB a month\*</td><td className="text-center py-2 px-4">Unlimited<br />\$0.15 / GB past 1 TB</td><td className="text-center py-2 px-4">Unlimited</td></tr>
        <tr><td className="py-2 px-4">Build events</td><td className="text-center py-2 px-4">Up to 100 million a month\*</td><td className="text-center py-2 px-4">Unlimited<br />\$1.50 / million past 100 million</td><td className="text-center py-2 px-4">Unlimited</td></tr>
        <tr><td className="py-2 px-4">Uploads</td><td className="text-center py-2 px-4">Free</td><td className="text-center py-2 px-4">Free</td><td className="text-center py-2 px-4">Free</td></tr>
      </tbody>

      <tbody id="compare-remote-cache" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4"><a href="/platform/remote-cache" className="hover:text-blue-600 dark:hover:text-blue-400 transition">Remote cache →</a></td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">CI and developer machines share a cache</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">Shared or separate, your choice</td></tr>
        <tr><td className="py-2 px-4">Build without the Bytes</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Encrypted at rest<div className="compare-sub">customer-managed KMS key when self-hosted on AWS</div></td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Configurable retention</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Works from any CI</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
      </tbody>

      <tbody id="compare-build-results" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4"><a href="/platform/web-ui" className="hover:text-blue-600 dark:hover:text-blue-400 transition">Build Results UI →</a></td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">Live build feed, filterable by branch, author, CI host and date</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Logs that stream during the build, searchable</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Timing profile and critical path</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Test results with every attempt; flaky tests marked</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">JUnit test-case parsing</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Per-target artifacts, downloadable</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Compare any two builds</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Target trends over one day to one year: wall time, cache hit, flake and pass rate</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Artifact size per target<div className="compare-sub">P90 size over time; find bloated outputs</div></td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Build Results API and MCP server</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
      </tbody>

      <tbody id="compare-remote-execution" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4"><a href="/platform/remote-execution" className="hover:text-blue-600 dark:hover:text-blue-400 transition">Remote execution →</a></td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">Linux workers<div className="compare-sub">x86 and Arm</div></td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">No platform limit</td></tr>
        <tr><td className="py-2 px-4"><a href="/docs/aspect-workflows/platform/guides/macos-remote-execution" className="text-blue-600 dark:text-blue-400 hover:underline">macOS</a> workers</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">No platform limit</td></tr>
        <tr><td className="py-2 px-4">GPU workers</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">No platform limit</td></tr>
        <tr><td className="py-2 px-4">Worker images<div className="compare-sub">Customizable OCI images</div></td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Docker-in-Docker actions</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Workers on your own hardware</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Fleets scale to zero when idle</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
      </tbody>

      <tbody id="compare-ci-runners" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4"><a href="/platform/ci-runners" className="hover:text-blue-600 dark:hover:text-blue-400 transition">CI runners and delivery →</a></td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">Managed runners for GitHub Actions, Buildkite, GitLab and CircleCI</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Linux runners<div className="compare-sub">x86, Arm, any AWS or GCP instance type</div></td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">No platform limit</td></tr>
        <tr><td className="py-2 px-4">GPU runners</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">No platform limit</td></tr>
        <tr><td className="py-2 px-4">macOS runners</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">Coming soon</td></tr>
        <tr><td className="py-2 px-4">Runner images</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Customizable VM images; OCI coming soon</td></tr>
        <tr><td className="py-2 px-4">Warm runners<div className="compare-sub">Restored Bazel cache and output base</div></td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Docker-in-Docker actions</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Runners scale to zero</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4"><a href="/docs/aspect-workflows/platform/features/selective-delivery" className="text-blue-600 dark:text-blue-400 hover:underline">Selective delivery</a></td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">✓</td></tr>
      </tbody>

      <tbody id="compare-identity" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4">Identity and network</td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">SSO</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">Coming soon</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">SCIM provisioning</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">Coming soon</td></tr>
        <tr><td className="py-2 px-4">Private endpoints<div className="compare-sub">PrivateLink, Private Service Connect or VPC peering</div></td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Isolated infrastructure, GovCloud and air-gapped</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Aspect actions in your own cloud audit log</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">Self-hosted</td></tr>
      </tbody>

      <tbody id="compare-support" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4">Support</td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4"><a href="https://slack.aspect.build" target="_blank" rel="noopener noreferrer" className="text-blue-600 dark:text-blue-400 hover:underline">Community Slack</a></td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Email support</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Slack support channel with Aspect Bazel experts</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Dedicated support engineer</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">24/7 on-call</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Uptime SLA</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4 text-zinc-300 dark:text-zinc-600">—</td><td className="text-center py-2 px-4">99.9%</td></tr>
      </tbody>

      <tbody id="compare-open-source" className="text-zinc-600 dark:text-zinc-400">
        <tr className="compare-section text-xs font-semibold tracking-widest uppercase text-zinc-500 dark:text-zinc-400"><td className="py-3 px-4">Free on every plan<div className="compare-sub">No plan needed. The CLI, AXL and rules are open source.</div></td><td className="compare-plan-repeat py-3 px-4">Free</td><td className="compare-plan-repeat py-3 px-4">Pay as you go</td><td className="compare-plan-repeat py-3 px-4">Enterprise</td></tr>
        <tr><td className="py-2 px-4">Aspect CLI: build, test, format, lint, BUILD file generation</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">AXL custom tasks</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4"><code>aspect cache diff</code></td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">Workflows bot for GitHub and GitLab pull requests</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
        <tr><td className="py-2 px-4">rules\_js, rules\_ts, rules\_py, rules\_lint, rules\_oci and bazel-lib</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td><td className="text-center py-2 px-4">✓</td></tr>
      </tbody>

      <tfoot>
        <tr>
          <td className="py-4 px-4" />

          <td className="text-center py-4 px-4"><a href="https://signup.aspect.build/" className="inline-flex items-center justify-center px-4 py-2 text-sm rounded-lg bg-blue-600 text-white font-semibold hover:bg-blue-700 transition shadow-sm">Get started for free</a></td>
          <td className="text-center py-4 px-4"><a href="#metering" className="inline-flex items-center justify-center px-4 py-2 text-sm 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-800 transition">See metering</a></td>

          <td className="text-center py-4 px-4"><a href="/trial" className="inline-flex items-center justify-center px-4 py-2 text-sm 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-800 transition">Start a 30-day trial</a></td>
        </tr>
      </tfoot>
    </table>
  </div>

  <div className="mt-4 text-sm text-zinc-500 dark:text-zinc-400">
    \* Your first month includes the full free allowance of 1 TB of egress and 100 million build events, 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-2 text-sm text-zinc-500 dark:text-zinc-400">
    Standard Aspect Enterprise agreements include a 99.9% uptime SLA and 24/7 on-call with a one-hour response time SLA. Uptime and response times may vary by agreement.
  </div>

  <div className="mt-6 text-center text-sm text-zinc-600 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>. Need them now? Aspect Enterprise has them today, with a <a href="/trial" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">30-day trial</a>.
  </div>
</Section>

<Section gray id="enterprise">
  <SectionHeader title="Only on Aspect Enterprise" subtitle="An isolated deployment for your organization: hosted by Aspect or self-hosted in your own cloud account." />

  <div className="marketing-grid-3" style={{ alignItems: "stretch" }}>
    <div className="p-6 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
      <h3 className="text-base font-semibold text-zinc-900 dark:text-white"><a href="/docs/aspect-workflows/platform/choosing" className="hover:text-blue-600 dark:hover:text-blue-400 transition">Deployment</a></h3>

      <ul className="check-list mt-4 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
        <li>Isolated infrastructure: no other customer shares it</li>
        <li>Hosted by Aspect, in an account of its own</li>
        <li>Self-hosted in your AWS account or GCP project</li>
        <li>Remote execution workers on your own hardware</li>
        <li>GovCloud and air-gapped deployments</li>
      </ul>
    </div>

    <div className="p-6 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
      <h3 className="text-base font-semibold text-zinc-900 dark:text-white">Network</h3>

      <ul className="check-list mt-4 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
        <li>Private endpoints over AWS PrivateLink or GCP Private Service Connect</li>
        <li>VPC peering</li>
        <li>Endpoints on your own DNS domain</li>
      </ul>
    </div>

    <div className="p-6 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800">
      <h3 className="text-base font-semibold text-zinc-900 dark:text-white">Who operates it</h3>

      <ul className="check-list mt-4 space-y-2 text-sm text-zinc-600 dark:text-zinc-400">
        <li>Fully managed by Aspect, hosted or in your own cloud account</li>
        <li>Co-maintained by Aspect and your team</li>
        <li>Customer-managed, with Aspect given operational or read-only access</li>
        <li>No Aspect access</li>
      </ul>
    </div>
  </div>

  <div className="mt-8 space-y-2 text-center text-sm text-zinc-600 dark:text-zinc-400">
    <div>Coming soon: On-prem, deployed with a Helm chart on your own hardware. <a href="/contact?topic=on-prem" className="text-blue-600 dark:text-blue-400 hover:underline">Join the early access list</a>.</div>
    <div>Planned: Azure and Oracle Cloud. <a href="/contact" className="text-blue-600 dark:text-blue-400 hover:underline">Contact us</a> if you're interested.</div>
  </div>
</Section>

<Section>
  <SectionHeader title="Aspect CLI and rulesets" subtitle="Free and open source. No Aspect Workflows plan needed." />

  <FeatureGrid3>
    <FeatureCard title="Aspect CLI" href="/tools/cli" description="The task runner for Bazel: build, test, format, lint, BUILD file generation and delivery, plus your own tasks in Starlark with AXL. Status checks and PR comments on GitHub and GitLab.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/open-source.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=8be03fe9577fdc3ec8ddb2838834dd99" alt="" width="48" height="48" data-path="images/marketing/icons/open-source.svg" />
    </FeatureCard>

    <FeatureCard title="Aspect rulesets" href="/platform/rules" description="rules_py, rules_js, rules_ts, rules_lint and more, maintained by the team that runs Aspect Workflows.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/puzzle.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d7988f951af9de3713bb62f795bc3da2" alt="" width="40" height="40" data-path="images/marketing/icons/puzzle.svg" />
    </FeatureCard>

    <FeatureCard title="Bazel courses" href="/learning" description="Self-paced courses from Bazel 101 up. Free, no account needed.">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/icons/Documentation.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=06dde831b9dc258ec192c68dee586094" alt="" width="48" height="48" data-path="images/marketing/icons/Documentation.svg" />
    </FeatureCard>
  </FeatureGrid3>

  <div className="flex flex-wrap justify-center gap-4 mt-10">
    <a href="/docs/cli/install" 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">
      Install the CLI
    </a>
  </div>
</Section>

<Section gray id="faq">
  <SectionHeader title="Pricing questions" />

  <div className="mb-12">
    <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Which plan fits a larger engineering org?</h3>

    <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
      Aspect Cloud, if what you need is a shared cache and the Build Results UI: Free, then Pay as you go past the free allowance. Aspect Enterprise, if you need remote execution, CI runners or selective delivery today, SSO, or infrastructure no other customer shares.
    </div>
  </div>

  <div className="marketing-grid-2" style={{ gap: "2.5rem 3rem" }}>
    <div className="faq-col space-y-8">
      <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">Aspect Cloud</div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Do I need a credit card or a sales call to start?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          No. <a href="https://signup.aspect.build/" className="text-blue-600 dark:text-blue-400 hover:underline">Sign up</a> for Free and the <a href="/quickstart" className="text-blue-600 dark:text-blue-400 hover:underline">Quickstart</a> connects your first build. The Aspect CLI writes the Bazel flags for you. Your first month includes the full free allowance without a card. After that, usage without a card is capped at 100 GB of egress and 10 million build events a month; add one to keep the full free allowance, and to go past it.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Free or Pay as you go?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Free covers up to 10 users, 1 TB of cache egress and 100 million build events a month. Pay as you go meters what you use past that: users past 10 are \$12 per user per month, egress past 1 TB is \$0.15 per GB, and build events past 100 million are \$1.50 per million. Uploads are free. Teammates join one organization and share one cache and one build history.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">What counts as a user?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          A member of your Aspect organization.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">What counts as egress?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Data downloaded from the cache: the outputs Bazel fetches on a cache hit. Uploads are free. Your organization's <a href="https://app.aspect.build/settings/org/usage" className="text-blue-600 dark:text-blue-400 hover:underline">usage page</a> in Aspect settings shows monthly egress usage.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">What counts as a build event?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Each event in the Build Event Protocol stream Bazel sends to the Build Results UI, such as a target configured or completed, or a test result.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">How do I estimate our egress?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Measure it on Free. Point CI and a few developers at Aspect Cloud for a week, then read egress to date on your organization's <a href="https://app.aspect.build/settings/org/usage" className="text-blue-600 dark:text-blue-400 hover:underline">usage page</a> and scale it to a month. Egress falls with what Bazel downloads: <a href="/docs/aspect-workflows/platform/features/remote-cache#build-without-the-bytes" className="text-blue-600 dark:text-blue-400 hover:underline">Build without the Bytes</a> keeps intermediate outputs in the cache instead of fetching them.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">What happens at the free limits?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          With a credit card on file, usage past 10 users, 1 TB of egress or 100 million build events is metered at the rates above. Without one, usage stops at those limits in your first month, and at 100 GB of egress or 10 million build events in later months, until the next month or until you <a href="https://app.aspect.build/settings/org/billing" className="text-blue-600 dark:text-blue-400 hover:underline">add a card</a>.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Will remote execution and CI runners cost extra on Aspect Cloud?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Pricing for them will be published here before they launch. Aspect Cloud's CI runners will be Linux, customized through an OCI image.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">What uptime does Aspect Cloud aim for?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Free and Pay as you go run on the same infrastructure, operated by Aspect with a 99.9% uptime target. A contractual uptime SLA is part of Aspect Enterprise agreements.
        </div>
      </div>
    </div>

    <div className="faq-col space-y-8">
      <div className="text-xs font-semibold tracking-widest uppercase text-blue-600 dark:text-blue-400">Aspect Enterprise</div>

      <div id="enterprise-pricing">
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">How is Aspect Enterprise priced?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          As an annual platform fee based on your configuration, including:

          <ul className="list-disc pl-5 mt-2 space-y-1">
            <li><strong>Remote execution capacity</strong>: the vCPU ceiling you configure.</li>
            <li><strong>CI runner capacity</strong>: the vCPU ceiling you configure.</li>
            <li><strong>The shape of the deployment and the support level</strong>: for example, how much access Aspect has, from Aspect-managed to no Aspect access at all, as in an air-gapped deployment, or bringing your own identity provider.</li>
          </ul>

          <p className="mt-2">The platform fee measures no usage against the ceiling, you can raise or lower the ceiling at any time during a subscription, and the price per vCPU falls as capacity grows; <a href="/docs/aspect-workflows/enterprise/capacity" className="text-blue-600 dark:text-blue-400 hover:underline">estimating capacity</a> shows how to size both. Aspect doesn't charge for users, builds or build events, and the Build Results UI is included.</p>
          <p className="mt-2">Self-hosted, there are no compute or data transfer charges from Aspect: the infrastructure runs in your own AWS account or GCP project, and CI runners in the deployment's VPC keep its data transfer to a minimum. Hosted by Aspect, cloud costs, compute included, are passed through at on-demand prices, separately from the platform fee.</p>
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Can we try Aspect Enterprise first?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Yes. A <a href="/trial" className="text-blue-600 dark:text-blue-400 hover:underline">30-day trial of Aspect Enterprise</a> puts your existing build on the deployment's remote execution and remote cache from your current CI, on the same commits, without blocking a merge, and measures the result against your current CI.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Which CI runners does Aspect Enterprise offer?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Aspect Workflows managed CI runners for GitHub Actions, Buildkite, GitLab and CircleCI: Linux VMs (x86, Arm, GPU) on any AWS or GCP instance type, with fully customizable images, in runner groups registered with your CI provider, with warming. macOS runners and OCI image-based runners are coming soon. On any other CI system, such as Jenkins, Bamboo, Travis CI or Bitbucket Pipelines, you can bring your own runners and use the remote cache, remote execution and Build Results UI.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Are GPUs available?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Yes, on Aspect Enterprise: GPU remote executors and GPU CI runners.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Do developers share CI's cache on Aspect Enterprise?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Your choice. The endpoint developers use can share CI's cache and remote executor fleet, or run a separate cache and fleet of its own.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Is SSO available?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          Aspect Enterprise includes SSO, and SCIM provisioning is coming soon to it. SSO is coming soon to Aspect Cloud.
        </div>
      </div>

      <div>
        <h3 className="text-lg font-semibold text-zinc-900 dark:text-white">Where does our build data live?</h3>

        <div className="mt-2 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
          On Aspect Cloud, on shared infrastructure, scoped to your organization. On <a href="/docs/aspect-workflows/enterprise/overview" className="text-blue-600 dark:text-blue-400 hover:underline">Aspect Enterprise</a>, on infrastructure no other customer shares: an account of its own hosted by Aspect, or your own cloud account when self-hosted. The <a href="/security" className="text-blue-600 dark:text-blue-400 hover:underline">security page</a> covers compliance.
        </div>
      </div>
    </div>
  </div>
</Section>

<Section id="bazel-support">
  <div className="max-w-3xl mx-auto p-8 rounded-xl border border-zinc-200 dark:border-zinc-700 text-center" style={{ maxWidth: "768px", margin: "0 auto", textAlign: "center" }}>
    <h2 className="text-2xl font-semibold text-zinc-900 dark:text-white">Bazel support</h2>

    <div className="mt-3 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
      Help with Bazel itself, with or without Aspect Workflows.
    </div>

    <div className="mt-4 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
      <strong className="text-zinc-900 dark:text-white">Community</strong>, free: the <a href="https://slack.aspect.build" target="_blank" rel="noopener noreferrer" className="text-blue-600 dark:text-blue-400 hover:underline">Aspect Community Slack</a> and self-led Bazel courses.
    </div>

    <div className="mt-1 text-sm text-zinc-600 dark:text-zinc-400 leading-relaxed">
      <strong className="text-zinc-900 dark:text-white">Standard</strong>: a dedicated Slack channel, unlimited questions, and a response SLA.
    </div>

    <div className="mt-4 text-sm">
      <a href="/services#support" className="text-blue-600 dark:text-blue-400 font-semibold hover:underline">Bazel support plans →</a>
    </div>
  </div>
</Section>

<CTA title="Start on Aspect Cloud, or scope an Enterprise deployment" subtitle="Aspect Cloud takes a sign-up, no sales call. Aspect Enterprise starts with a 30-day trial next to your current CI." primaryCta="Get started for free" primaryHref="https://signup.aspect.build/" secondaryCta="Start a 30-day trial" secondaryHref="/trial" />


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