Ask HN: What's the simplest static website generator?

39 points by _kush ↗ HN
I've tried Jekyll in the past but the setup is a bit overwhelming and it gets complicated super fast. I am looking for something where I can keep my header and footer separate and then include them in every other page. That's it. No CMS and no blog. Is there something which handles this well and is easy to set up?

I use Cloudflare Pages to host my website

75 comments

[ 1.6 ms ] story [ 148 ms ] thread
i liked hugo, but its a little harder to set up.
Ugh, this might be an overkill suggestion but Next.js is really easy to work with, and your goal can be accomplished super easily.

Cloudflare page for deploying Next.js static site:

https://developers.cloudflare.com/pages/framework-guides/nex...

On the sidebar they provide a ton of other guides for different generators, too.

Astro is more simple than NextJS in my opinion, though even that feels like overkill for an SSG that's only needed to keep the header/footer consistent.
Pandoc can be your friend. My site maker [1] is built around it.

I think a hundred or so well-chosen lines of your favourite scripting language can do wonders. Mine is ~300 lines of Bash because I over-engineered a thing or two for kicks. The core of it is maybe 50 lines.

[1] https://github.com/adityaathalye/shite

The README documents the architecture and rationale. Maybe it will help you figure out yours. Happy hacking!

+1 for Pandoc. Something like 100 lines of python extracts tagged documents from my Emacs org docs, converts to html and fixes links.
Astro, it works very well on Cloudflare Pages.
The r file command in sed(1) copies the contents of file to standard output; the rest is a simple matter of programming.
If you all don't like sed(1), then use awk(1); I just hadn't recommended that approach because it'd be too simple: like with poetic form, if you want to do something interesting, you've got to choose some constraints.
Hugo has gotten easier recently to get up and running. Seems to come prepackaged with a simple, workable "template" when you create a new site. :)
Its templating language is anything but simple, however.
It has a bit of learning curve, that’s for sure. This makes me curious though, have you found any better templating system?
Zora is nice, written in Rust so there's really no setup compared to the Ruby gems mess that is Jekyll.
I think you're thinking about Zola: https://github.com/getzola/zola

But yes, if I were to recommend something, it'd be Zola given that there's just one executable that you need to run and there's absolutely no setup required.

We used Zola for https://matrix.org and it was an overall pleasant experience!

One major upside of Zola is that it's very stable, so you don't end up updating your dependencies every other day.

One significant downside is that Zola seems to be sometimes a bit creative with the slugs generation, which can generate slug collisions where there shouldn't be any. It's possible to override them manually though.

For a use case that straightforward isn’t the simplest SSG going to be:

  cat header.html body.html footer.html > page.html
??
You might enjoy mine https://mkws.sh/. It's shell based.
I am getting the following error on a 64bit Windows 10 machine:

./bin/pp: cannot execute binary file: Exec format error

Is it because it's a 32 bit binary?

I use GNU make and obsidian. Write content in markdown, feed it to https://github.com/commonmark/cmark to create html. I intended to splice files together using xslt but echo and cat written in the makefile sufficed.

Plumbing is a bit obfuscated, not sure I've written it down anywhere. I write/edit files in obsidian or emacs. The obsidian sync feature copies those to a pi5 which also runs obsidian. That stashes whatever is in the directory into a fossil repo as a backup / sync to other machines mechanism. Something runs make periodically to rebuild the site which gets copied back into obsidian and thus ends up back on whatever device I'm using to edit the files.

A simpler setup would involve committing markdown to a github repo and having a cron/make somewhere pull from that, rebuild the site, commit to the same or a different github repo.

I have used Caddy and its Server Side Include functionality (templates) to take care of repeating elements like header and footer etc. Does not get much simpler than that.
For simply including a common header & footer in pages, any server side include (SSI) compatible server will do: Nginx, Apache, or Caddy.

With SSI, your template for every page would basically look like this:

  <!DOCTYPE html>
  <html lang="en" class="no-js">

  <head>
    <!--#include virtual="/ssi/head.html" -->

    <title></title>
    <meta name="description" content="">
  </head>

  <body>

    <header>
      <!--#include virtual="/ssi/header.html" -->
    </header>

    <main>
    </main>

    <footer>
      <!--#include virtual="/ssi/footer.html" -->
    </footer>

  </body>

  </html>
Making your own SSG is another good solution. They're easy to make, and you can tailor them to your own particular needs.
gcc -E was my first SSG. Run it on files like this...

    #include "templatestart.html"
    
    <!-- Content -->
    
    #include "tenplateend.html"
Eventually a combination of wanting faster speed and NIH syndrome made me write my own that did significantly less parsing and processing.

Then I built that into a live update system I called TCUP (torstenvl's content update program).

It was a fun project, and ended up being the first non-trivial program I wrote (I was 17-18).

You can iterate over files and collect them into a map from paths to contents and use a 2kb snarkdown if you need markdown parsing.
Just learn next.js and use it for simple sites and complicated ones. It hosts on a CDN for free and it's great.
I like Hugo but it's still a little complicated -- Probably something more modern now tbh
It might not be the simplest but it was the first I learned so it's simple to me.

Flask with jinja, then you just do {% extends layout.html %} etc. It might be overkill but it's not that hard

How many lines of Python does that end up being? Seems almost reasonable that this could fit in just a couple files
technically:

  from flask import Flask, render_template
  app = Flask(__name__)

  @app.route('/')
  def index():
      return render_template('index.html')
then a templates/ folder to keep layout.html, index.html etc. (and a static folder to keep js & css if you want)
I use Hugo, have considered moving to something more modern, but it just works.

All questions I have, are solved by ChatGPT, e.G. adding "_small" to jpgs.

   {{ $newImageURL := replace .Params.image ".jpg" "_small.jpg" }}
so I don't need to learn or remember Hugo API.

Quite recently I've added jamstack to reduce image sizes etc. to make the site faster.

Notepad. And a web server that can do includes.
I would recommend just writing one yourself. It's not very hard, and the process of writing it will make you intimately familiar with how it works, so you won't feel overwhelmed.

Just writing simple software feels way better than reading docs for an arcane tool that will change on you over time due to updates.

Yep just write your own, you can finish it in hour(s) if you yourself don’t overcomplicate things ;)

You might come back to it in a year and hate it, but that’s also part of the SSG vision question every software engineer is required to go through.

Hugo comes out of the box with headers and footers, but you'll probably want to grep around a bit before you understand them fully. I can still recommend my https://github.com/Siilikuin/minimum-viable-hugo as a decent way to get started with a "gears first" approach to Hugo, even though recent developments have made it a bit outdated (in a good way!).
Maybe a bit too elaborate for your taste, but I've used https://astro.build/ and loved every bit of it.
I've used astro to build https://ergaster.org and it was very simple to work with. I host it on CloudFlare Pages and it works like a charm.

I discovered it via one of Kevin Powell's videos: a 20 minutes tutorial to get started using Astro: https://www.youtube.com/watch?v=acgIGT0J99U

I find it very simple to use as a developer, but there are quite a few things happening behind the scenes to make the site itself faster to load for users (e.g. it inlines the CSS so you don't have to load a separate sheet).

The only downside of it is that it depends on a package manager.

I suggest you to try out Eleventy (https://www.11ty.dev/)

Quite simple to start, and a nice system to add some scripting and styles without the requirement of bringing in a framework.

Eleventy is pretty great! Highly recommend.
11ty user here too, converted from Jekyll. Very pleased with 11ty.
Would be my suggestion to.
This is exactly what I was looking for - thanks for the suggestion!
I keep wondering about this, but you know what? I just keep using Blogger from Google.

It's there, it works, and it's totally simple. I don't have to do any maintenance or worry about hosting or a domain name.

Images go into my Flickr account, and I save a copy of each post's text, in case I ever want to do something else. But not so far. Been on Blogger since 2009.