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

# About Aspect Build

> Aspect Build commercializes Bazel, Google's open source build system, through expert support and the Aspect Workflows developer productivity platform.

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 StatsBar = ({stats = []}) => <div className="flex flex-wrap justify-center gap-8 md:gap-16 py-4">
    {stats.map((stat, i) => <div key={i} className="flex flex-col items-center text-center">
        <span className="text-3xl md:text-4xl font-bold text-zinc-900 dark:text-white">{stat.value}</span>
        <span className="text-sm text-zinc-500 dark:text-zinc-400 mt-1">{stat.label}</span>
      </div>)}
  </div>;

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 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 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="The Bazel company" subtitle="Aspect Build commercializes Bazel, Google's open source build system, by providing expert services and the Aspect Workflows developer productivity platform." primaryCta="Contact Us" primaryHref="/contact" centered />

<Section gray>
  <StatsBar
    stats={[
{ value: "2021", label: "Founded" },
{ value: "100+", label: "Engineering teams served" },
{ value: "20+", label: "Open source Bazel rule sets" },
]}
  />
</Section>

<Section>
  <div className="grid md:grid-cols-2 gap-12 items-start">
    <div>
      <SectionHeader title="Company history" centered={false} />

      <div className="space-y-4 text-zinc-500 dark:text-zinc-300 leading-relaxed text-base">
        <p>
          Aspect Build was founded in 2021 to commercialize Bazel, Google's open sourced build system, now stewarded by the Linux Foundation. Our team includes early Bazel contributors and maintainers who built and operated Bazel at Google scale.
        </p>

        <p>
          Our insight: Bazel provides a highly efficient and scalable core build engine, but organizations outside Google need a richer ecosystem of tools, integrations, and services to adopt it successfully. We began with Bazel services and then released the Aspect Workflows developer productivity platform.
        </p>
      </div>
    </div>

    <div>
      <SectionHeader title="Why the name?" centered={false} />

      <div className="space-y-4 text-zinc-500 dark:text-zinc-300 leading-relaxed text-base">
        <p>
          Our company name is a nod to Bazel's core concepts. In Bazel, an "aspect" is a powerful extension that enriches the build graph with additional insights, actions, and dependencies, unlocking deeper analysis and automation.
        </p>

        <p>
          Meanwhile, code and builds are structured in "BUILD" files. Just like Bazel aspects enhance the build process, Aspect Build enhances your developer experience with expert services and our developer productivity platform.
        </p>
      </div>
    </div>
  </div>
</Section>

<Section gray id="open-source">
  <SectionHeader label="Open source" title="Bazel experts and open source leaders" subtitle="Aspect's open source Bazel rules and tools are used by thousands of engineering teams worldwide." />

  <FeatureGrid3>
    <MediaCard title="Bazel Rules" description="Browse our complete collection of open source Bazel rules: Python, JS/TS, Go, OCI, lint, and more." href="/docs/bazel/open-source">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/aspect-rules-repos.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5736ed8928b7e9bf3f361ddcc7e434b6" alt="Aspect Bazel rules repositories on GitHub" width="976" height="556" data-path="images/marketing/product/aspect-rules-repos.svg" />
    </MediaCard>

    <MediaCard title="Aspect CLI" description="A fully open source task runner that extends Bazel with first-class developer workflows: format, lint, BUILD generation, and delivery." href="/docs/cli/overview">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/product/aspect-cli.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=4d8178c5fed8de63a944f942b1b800d4" alt="Aspect CLI" width="1088" height="708" data-path="images/marketing/product/aspect-cli.avif" />
    </MediaCard>

    <MediaCard title="Linting & formatting" description="rules_lint brings first-class linting and formatting to every language under Bazel: incremental, cache-aware, and hold-the-line." href="/docs/bazel/linting">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/github/Lint-comments.avif?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=3997d591cccf5d00cf8039bc0f4ca047" alt="rules_lint in action" width="1088" height="636" data-path="images/marketing/github/Lint-comments.avif" />
    </MediaCard>
  </FeatureGrid3>
</Section>

<CustomerLogos title="Trusted by leading engineering teams">
  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/6sense.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c5516feb9a828c21994978a22a865435" alt="6sense" className="customer-logo" width="68" height="28" data-path="images/marketing/customers/6sense.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/AssemblyAI_2.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=344cedab08161a3f4639e086988f5e6a" alt="AssemblyAI" className="customer-logo" width="116" height="28" data-path="images/marketing/customers/AssemblyAI_2.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/bedrock-logo.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6ddbd38fb254b8eed0d0b68f6c2b15fd" alt="Bedrock" className="customer-logo" width="154" height="40" data-path="images/marketing/customers/bedrock-logo.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/BostonDynamics.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6b33262c301f50ec5ec68721d3ec4288" alt="Boston Dynamics" className="customer-logo" width="120" height="28" data-path="images/marketing/customers/BostonDynamics.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Glydways_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=108020ca2a37a42a7de2dae3d18739de" alt="Glydways" className="customer-logo" width="111" height="28" data-path="images/marketing/customers/Glydways_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Google.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=65f9bb4611f92a8978eba7f33f0b755d" alt="Google" className="customer-logo" width="66" height="28" data-path="images/marketing/customers/Google.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Physical-Intelligence_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=0f1e23aad17d4665f5e27a1a27497388" alt="Physical Intelligence" className="customer-logo" width="191" height="28" data-path="images/marketing/customers/Physical-Intelligence_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/Robinhood.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=7c056e03beb7eb7656ae9bd7bc2fe483" alt="Robinhood" className="customer-logo" width="103" height="28" data-path="images/marketing/customers/Robinhood.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/rogo-logo_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=5efaefc40c45c9977545c3e432f2099d" alt="Rogo" className="customer-logo" width="53" height="28" data-path="images/marketing/customers/rogo-logo_1.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/superhuman.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=6622b36a88301f73a2eae2ede19db903" alt="Superhuman" className="customer-logo" width="189" height="40" data-path="images/marketing/customers/superhuman.svg" />

  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/customers/vectara_1.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=742572d8ff6d7dea48fd919e96e1f64e" alt="Vectara" className="customer-logo" width="100" height="28" data-path="images/marketing/customers/vectara_1.svg" />
</CustomerLogos>

<Section gray>
  <SectionHeader label="Investors" title="Backed by the best" />

  <div className="flex flex-wrap justify-center gap-x-20 gap-y-10 items-center py-4">
    <a href="https://firstmark.com" target="_blank" rel="noopener noreferrer" className="opacity-70 hover:opacity-100 transition">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/firstmark.svg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c92fdb437f4c5c7a1b15343b714e49fb" alt="FirstMark" className="h-7 w-auto brightness-0 dark:invert" width="274" height="32" data-path="images/marketing/logos/firstmark.svg" />
    </a>

    <a href="https://prestonwernerventures.com" target="_blank" rel="noopener noreferrer" className="opacity-70 hover:opacity-100 transition">
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/logos/preston-werner-ventures.png?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=1184d1ef14e315b3b3f957f033492cb5" alt="Preston-Werner Ventures" className="h-12 w-auto brightness-0 dark:invert" width="280" height="128" data-path="images/marketing/logos/preston-werner-ventures.png" />
    </a>
  </div>
</Section>

<Section id="news">
  <SectionHeader label="Press" title="In the news" />

  <FeatureGrid3>
    <MediaCard title="Aspect Build gets $3.85M to help developers create software with Bazel" description="TechCrunch · October 2024" href="https://techcrunch.com/2024/10/01/aspect-build-gets-3-85m-to-help-developers-create-software-with-bazel/" external>
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/news/techcrunch.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=395a0815cdf6243f40821b009819b475" alt="TechCrunch article" width="1200" height="800" data-path="images/marketing/news/techcrunch.jpg" />
    </MediaCard>

    <MediaCard title="Investing in Aspect: The Developer Platform for Monorepos and Multi-Language Builds" description="FirstMark · October 2024" href="https://firstmark.com/story/investing-in-aspect-the-developer-platform-for-monorepos-and-multi-language-builds/" external>
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/news/firstmark-story.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=c4fb4dfa33955e3c3efa6bd1b8b72bcd" alt="FirstMark story" width="768" height="511" data-path="images/marketing/news/firstmark-story.jpg" />
    </MediaCard>

    <MediaCard title="Why everyone is moving to Google's Bazel build system" description="The Stack · December 2025" href="https://www.thestack.technology/why-everyone-is-moving-to-googles-bazel-build-system/" external>
      <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/marketing/news/thestack.jpg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=56e2b559775c25e82cd7b84cee925072" alt="The Stack article" width="1200" height="798" data-path="images/marketing/news/thestack.jpg" />
    </MediaCard>
  </FeatureGrid3>
</Section>

<CTA title="Make Bazel work for your team" subtitle="Talk to our team about Bazel support and the Aspect Workflows developer productivity platform." primaryCta="Contact Us" primaryHref="/contact" secondaryCta="Start a Free Trial" secondaryHref="/trial" />
