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

# rules_js 1.0.0

> Upgrade to rules_js 1.0.0 for faster JavaScript build, test, and release tooling under Bazel. Get support from Aspect

export const BlogPost = ({title, date, authors, tags, image, children}) => {
  const tagList = tags ? tags.split(", ").filter(Boolean) : [];
  const tagSlug = t => t.toLowerCase().replace(/&/g, "").replace(/\+/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
  const formattedDate = date ? new Date(date + "T00:00:00").toLocaleDateString("en-US", {
    year: "numeric",
    month: "long",
    day: "numeric"
  }) : "";
  return <section className="w-full flex justify-center px-4 py-12 md:py-16">
      <div style={{
    maxWidth: "800px",
    width: "100%"
  }}>
        {image && (typeof image === "string" ? <img noZoom src={image} alt={title} className="w-full rounded-xl mb-8" style={{
    maxHeight: "400px",
    objectFit: "cover"
  }} /> : <div className="blog-post-hero-image">{image}</div>)}
        <h1 className="text-3xl md:text-4xl font-bold text-zinc-900 dark:text-white">
          {title}
        </h1>
        <div className="flex flex-wrap items-center gap-3 mt-4 text-sm text-zinc-500 dark:text-zinc-400">
          {authors && <span>{authors}</span>}
          {authors && formattedDate && <span>·</span>}
          {formattedDate && <span>{formattedDate}</span>}
        </div>
        {tagList.length > 0 && <div className="flex flex-wrap gap-2 mt-3">
            {tagList.map(tag => <a key={tag} href={"/blog/tags/" + tagSlug(tag)} className="px-2 py-0.5 rounded-full text-xs bg-zinc-100 dark:bg-zinc-800 text-zinc-600 dark:text-zinc-400 hover:bg-blue-100 dark:hover:bg-blue-900/40 hover:text-blue-700 dark:hover:text-blue-300 transition">
                {tag}
              </a>)}
          </div>}
        <hr className="my-8 border-zinc-200 dark:border-zinc-700" />
        <div className="prose dark:prose-invert max-w-none">{children}</div>
      </div>
    </section>;
};

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

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>;

<MarketingPage />

<BlogPost title="rules_js 1.0.0" date="2022-08-08" authors="Alex Eagle" tags="JavaScript, Releases, Bazel">
  <img noZoom src="https://mintcdn.com/aspectbuild/x1L7Iep716jCyJVo/images/blog/hashnode/hn-96f18ecb71.jpeg?fit=max&auto=format&n=x1L7Iep716jCyJVo&q=85&s=d21eafe3ff9f3d648f4fb66a067c1e4e" alt="" className="blog-post-cover" width="1600" height="1280" data-path="images/blog/hashnode/hn-96f18ecb71.jpeg" />

  After a few weeks in Release Candidate, we've just released the first semver-major version of rules\_js. 🚀 For those who have been waiting for this milestone before investing time in the upgrade - wait no longer!

  [github.com/aspect-build/rules\_js#v1.0.0](https://github.com/aspect-build/rules_js/releases/tag/v1.0.0)

  rules\_js is a faster and more compatible approach to integrating JavaScript build, test, and release tooling under Bazel, compared with the earlier rules\_nodejs.

  Learn more:

  * Our original post on rules\_js: [https://blog.aspect.dev/rules-js](https://blog.aspect.dev/rules-js)

  * My conference talk: [https://www.aspect.dev/resources](https://www.aspect.dev/resources)

  * npm benchmarks: [https://blog.aspect.dev/rulesjs-npm-benchmarks](https://blog.aspect.dev/rulesjs-npm-benchmarks)

  Aspect Development is a Bazel consulting agency and we're releasing this under an Apache 2.0 license because we believe in the community power of open-source. Engineers working at Figma, Aurora, Robinhood, and Adobe have made contributions, however there is no large company behind rules\_js who is paying for hours spent on development. Since we have to pay our engineers, we need your support!

  1. Book a paid support meeting with our lead engineers on Calendly: [https://calendly.com/alexeagle](https://calendly.com/alexeagle) or [https://calendly.com/gregmagolan](https://calendly.com/gregmagolan). We'll unblock you right away and can give in-depth answers to technical questions, explain design trade-offs, and more.

  2. Pay a "bug bounty" for specific OSS fixes or features you need right away, rather than wait for us to prioritize them based on our client's needs.

  3. Sign up for OSS support for Bazel, including Aspect's Bazel rules, billed monthly.

  4. Hire our Bazel experts as hourly consultants. Start with a free consult: [https://calendly.com/alexeagle/consult](https://calendly.com/alexeagle/consult)

  You can contact [mailto:hello@aspect.dev](mailto:hello@aspect.dev) to sign up for the last three options.

  We're excited to partner with you and can't wait to see what your organization can build!
</BlogPost>
