Jamstack

From IndieWeb
Jump to: navigation, search


Jamstack is a web development architecture based on client-side JavaScript, reusable APIs, and prebuilt static pages served via a CDN.

Definition from the community website:

Jamstack is the new standard architecture for the web. Using Git workflows and modern build tools, pre-rendered content is served to a CDN and made dynamic through APIs and serverless functions. Technologies in the stack include JavaScript frameworks, Static Site Generators, Headless CMSs, and CDNs.

That means a static site which is built by a static site generator that supports updates through APIs like micropub and webmention would be considered "built with the Jamstack".

The main benefits given by proponents of the Jamstack architecture are:

  • Performance (particularly page speed and loading times)
  • Security
  • Compatibility with CDNs for easier scaling
  • A decoupled or loosely coupled development environment

A criticism, however, is that a lot of common tools used to create Jamstack websites encourage site design that are js;dr, with an overreliance on client-side JavaScript re-rendering or "hydration" e.g. Gatsby and NextJS. Some parts of the Jamstack community are actively building alternatives, such as Eleventy, to counteract this trend.

Netlify

The term "Jamstack" and the surrounding marketing has always been heavily tied to Netlify. Their service is specifically tailored towards this architectural pattern and their founders and employees are frequently involved in the community. The central "community" website is run and managed by Netlify, as is the main community conference Jamstack Conf, and the most-cited textbook on the subject was written by a Netlify Co-Founder and another employee (Mathias Biilmann and Phil Hawksworth), and is distributed through Netlify's main website.

As a result, the definition of what "Jamstack" is/isn't has a tendency to change in step with the technical capabilities of the Netlify platform. For example, as Netlify has continued to tout its integration with the Cloudflare CDN as a major part of its service, so the definition of "Jamstack" has increasingly emphasised the fact that static, pre-rendered files can more readily take advantage of the benefits that CDNs provide.

Quote from Jamstack.org:

The name "Jamstack" came about because as Matt Biilmann and Chris Bach were creating modern web development workflows and capabilities at Netlify, they found there was no easy way to refer to the architectural approach in conversation.

(See Netlify for more technical information.)

Historical Definition

When the term "jamstack" was first coined it was describing a specific stack of software and tooling: client-side JavaScript, reusable APIs, and prebuilt Markup. Those elements formed the acronym JAM, giving us JAMstack.

For example, at the time of launch the community website defined "JAMstack" sites as:

Your project is built with the Jamstack if it meets three key criteria:

  1. Any dynamic programming during the request/response cycle is handled by JavaScript, running entirely on the client. This could be any frontend framework, library, or even vanilla JavaScript.
  2. . All server-side processes or database actions are abstracted into reusable APIs, accessed over HTTP with JavaScript. These can be custom-built or leverage third-party services.
  3. Templated markup should be prebuilt at deploy time, usually using a site generator for content sites, or a build tool for web apps.

Over time, however, the definition began to encompass a much broader range of tools and began to be viewed less as a strict "stack" and more as an architectural philosophy. Quote from Jason Lengstorf:

The Jamstack is not a stack; it's a software architecture (like microservices). It's unfortunate that it's phrased as one, but I think we're only making our lives harder if we treat "Jamstack" the same way we treat MEAN or MERN or LAMP, which are actual, opinionated stacks.

In March 2020 Phil Hawksworth opened a discussion on the repository of the community website, the result of which was the official "lowercasing" of the term to reflect that broader definition.

It looks like just a little more support for those advocating for "Jamstack".

So, this is the path we will take on the jamstack.org site. And we'll work to do that consistently in the content we add, and in the design.

My hope is, that even if some opinions differ, the site will be consistent and clear, and all the people arriving fresh to the term and the concept, will have a less confused experience. And that it feels more natural to people when writing the word in materials.

See Also