Static Site Generator Without Node Modules: Why It Matters

A static site generator without node modules means one thing at install time: there is no npm install. You do not download a dependency tree, you do not maintain a lockfile, and you do not deal with version conflicts across machines.

That sounds like a small detail. In practice, it changes how much maintenance a site needs over its lifetime.

This article explains what node modules actually cost, why some static site generators avoid them, and when that difference matters for your project.

What Node Modules Actually Cost

A JavaScript-based static site generator pulls its build tool through npm. That gives you a huge ecosystem, but it also brings:

  • A node_modules folder with hundreds or thousands of packages
  • A lockfile that must stay in sync across machines
  • Transitive dependency updates and occasional security advisories
  • Version conflicts when two plugins expect different versions of the same package
  • A larger build image in CI and Docker

None of this is broken. It is a trade-off. The ecosystem is large and mature. But it is maintenance you take on for as long as the site exists.

What a Node-Free Build Looks Like

A Go static site generator compiles to a single binary. The build tool contains everything it needs.


go install github.com/mesinkasir/gax/cmd/gax@latest
gax build

That is the install and the build. There is no dependency install step, no lockfile to commit, and no package manager to keep updated.

The same binary runs on Linux, macOS, and Windows. In CI, you download it or install it with Go, then run it.

Why This Matters in Practice

The difference shows up in a few specific places:

CI and Docker images. A Node-based build image carries Node, npm, and often a package cache. A Go build image needs the Go toolchain, or just the binary. Smaller images build faster and have a smaller attack surface.

Onboarding. A new contributor clones the repository and runs the build. There is no "did you run npm install" step and no lockfile mismatch to debug.

Long-term maintenance. A site that sits untouched for a year still builds with the same binary. There is no dependency update required before you can rebuild it.

Version stability. The build output does not change because a transitive dependency released a patch. The binary version is the build version.

What You Give Up

A node-free build is not strictly better. You give up some things:

  • Plugin ecosystem. npm has a vast plugin ecosystem. Go build tools generally have fewer third-party plugins.
  • Familiar tooling. Frontend developers often already know npm, and a Node build fits their existing workflow.
  • JavaScript data pipelines. If your build needs to pull data through JavaScript libraries, a Node-based generator may be easier.

For sites that mostly render Markdown into HTML, these trade-offs rarely matter. For builds with complex JavaScript data processing, they might.

When a Node-Free SSG Makes Sense

A Go static site generator without node modules is a good fit if:

  • Your site is content-driven — blog, docs, marketing pages, portfolio
  • You want a build that stays stable over time
  • You deploy through CI or Docker and want smaller images
  • You do not need JavaScript plugins in the build step

It is a weaker fit if your build depends on JavaScript libraries or a large plugin ecosystem.

How GAX Handles This

GAX is a Go static site generator with no node modules. You install one binary, run the build, and get a site/ folder. Themes, layouts, and collections are part of the generator, not separate packages.

That means a GAX project has no package.json, no node_modules, and no lockfile. The content folder, the templates, and the binary are the whole project.

FAQ

What does "no node modules" mean?

It means the build tool does not depend on npm packages. There is no npm install step and no node_modules folder in the project.

Is a Node-free static site generator faster?

Not necessarily in build time — both can be fast. The main benefit is lower maintenance: no dependency tree, no lockfile, and no package updates to keep track of.

Can I use JavaScript in a GAX site?

Yes. The generated site is plain HTML, CSS, and JavaScript. You can include client-side JavaScript in your theme or pages. The difference is that the build step itself does not need Node.js.

Do I need Go installed to use GAX?

You can install the prebuilt binary without Go. Go is only needed if you build the binary from source or use go install.

Are there downsides to skipping node modules?

The main trade-off is a smaller plugin ecosystem. If your build depends on JavaScript libraries or npm plugins, a Node-based generator may fit better.

Next Steps