Right now I use Hugo, and I’m not particularly happy with it. To me, the documentation is needlessly dense, the CLI is cumbersome, and it just provides way more features than I need. Does anyone have a good recommendation for an alternative?
Desires:
- Ability to write all content in markdown
- Ability to distinguish - via either folder hierarchy or front matter - between blog posts, an about page, and other meta content
- Simple templating - all I need is the ability to write a universal header that pulls in CSS, etc, and then have different bodies for list pages and content pages
- Server mode - this isn’t a strict necessity but it’s nice to see a post as I write.
I’m using
zola
, and I think it’s brilliant!Ticks the boxes for all your desires. It’s fast, contained in a single binary, has a live updating local server, documentation is good and allows extra custom configuration properties for custom things in themes.
My personal website is built using Zola, here’s it’s source.
I think this is the one! Thanks!
I’ve been testing zola right now, in particular the sam theme, against a lot of website analyzers (accessibility, performance, w3c validators, ecological impact,..) and it’s pretty good, I think I’m gonna start using it, it looks simple and mature while providing all the features I wish (code formatting, RSS, …).
Exactly! And it’s easy to modify, and somewhat extensible for additional features you might want.
I use Zola as well. I think one of the biggest downsides is how few themes there are. In principle it’s not much work to modify an existing theme, but it’s still one more thing you need to do when setting up your blog.
You’re right. I wanted to build a custom theme anyway to personalize things, so that wasn’t much of a problem for me.
I use Hugo, has very good community support and a nice selection of themes.
I also use Hugo. I think single binary and therefore a trivial installation was the main selling point for me. I do not care for any of advanced functionalities or performance.
I managed to build my own theme that does what I need. Before searching in documentation I was looking at other themes to figure out how to do things.
I like Hugo. Use it as well, although quite limited use.
I use Hakyll. It’s written in Haskell and is completely programmable. It’s actually more of a framework for writing static site generators. That said, there are example codebases that you can get started with. It supports all your desires.
I use Hakyll, too, but it’s complete overkill for me. And I’m not deep enough in Haskell any more to do much development on it, so I’ve been considering moving to something else.
I still endorse Hakyll, fwiw, but its strength lies in either: 1- leveraging your existing Haskell knowledge, and/or 2- generating sites that are far more complex than most personal sites/blogs.
It’s also fun to spend more time programming your blog than writing blog posts.
i use hakyll and i’ve used it to also teach myself odd bits of haskell.
i like how extensible it is, and i’ve occasionally used it to add various bits and pieces
the main downside w.r.t. github is that you have to commit all the generated artefacts; which is definitely a shame.
i’ve not done too much funky stuff with it; but on my companies website i’ve used it to build some (very simple) features, such as lists and specialised rss views, next/previous blog post buttons, etc.
it’s not the most elegant code; but gets the job done.
Late to the party, but you might be interested in rib.
Why? Because by using rib, you will automatically learn Shake which it is built on top of. Compared to Hakyll, rib is relatively simple to use.
Disclaimer: I’m the author. :-)
hakyll here as well
Great to see you’re blogging (again), Pavlo!
Hakyll as well
Hakyll too. It’s simple if you only want to convert text into HTML, however, if you want something more advanced be prepared that you might spend more time figuring out how to implement this instead of writing.
I’m also using supplementary python scripts and relying on external means (e.g. jupiter/emacs) to generate HTML too, I shared my setup here
Wrote my own in OCaml, mostly to learn OCaml and because I wanted to try something new. Felt like writing my own was like a Jedi building their own lightsaber, and I could hack in whatever features/assumptions I wanted.
This let me write:
I don’t recommend it for other people; like, nothing’s stopping you, but I don’t know how reproducible the build is, there are no docs to speak of, and it has a few other requirements (e.g.
cmark
installed). Here’s the site and the repo for it.Happened to me with Haskell way back in late 2016… worth it. Scope has gotten really “99% fit to my needs” and likely sub-10% for anyone else out there. SSGs are the perfect side project, they can be scoped as seems sensible and tweaked and tunes regularly on an ongoing basis once “done”, and joyously dogfeedable.
I use Jekyll and Hugo but I’m constantly wrestling with them. Too many features. Too much magic. Too blog centric. They should be called “static blog generators”.
I dream of a “unified theory of static site generation” in which it would be as easy to host a blog as any other kind of content using a number of more generic primitives that give the user flexibility without creating complexity.
I’m in the same boat as you. Older stuff done in Jekyll, newer stuff done in Hugo. Feels like I’m only using 10% of the available bells & whistles, but have to fight the other 90% trying to inject themselves into my workflow. I’m considering moving everything to soupault, which conceptually seems much more interesting than the rest of the pack.
I use Hugo for my website, made everything from scratch. What are the things you found that are too blog-centric?
That was about a year ago so I may be a bit rusty but basically I had a hierarchy of different kinds of contents + some cross cutting elements. I wanted control over how the different kinds of content are displayed in their index pages and needed multiple levels of nesting.
Hugo makes it easy to create lists of different kinds of content with the minimum flexibility required to produce a blog. But when I wanted more control over index pages, links to sub content and multiple levels of nesting I found it very difficult to use. I had to read a ton of resources, watch hours of video tutorial, and still couldn’t get it done exactly how I wanted it to be. I could have done it all in Django in 2 hours.
I too use Hugo. Can be a bit overwhelming, i admit.
But may I suggest to use https://github.com/kaushalmodi/hugo-debugprint in your layout, so that while in devmode you can see all your page varables at the bottom of the page.
Has helped me a lot.
Thanks! I’ll give a try next time.
I use Jekyll as my default. Every time I try to use another SSG besides Jekyll, I keep noticing things I’d have in Jekyll normally. Unfortunately, I’ve made the mistake of attempting to write a SSG multiple times, sometimes in JS, sometimes in Rust, but those were more experiments than anything.
I must mention my own creature: PFT
Pelican since 2012 for my blog, but I’m using (and would recommend) hugo for new project, mostly because the former is super-duper-slow.
My current site is written by hand but I’m considering switching to soupault.
I use Jekyll and while there are some annoyances (posts must have a date in the name), it gets the job done. There’s a lot of support and templates and themes. Applying a new theme is really convenient.
The upside is that the strict post structure helps with other collaborators who would otherwise mess it up.
My last few sites, I’ve finally been disciplined enough to not start hacking on the template so I can get updates from the author.
Another upside is that GitHub uses Jekyll for its default pages, so while I don’t host through GitHub, it increases the volume of decent work on Jekyll.
edit: added in this stuff because I forgot that I recently had to make this decision and chose Jekyll.
I first started using Jekyll at work to try to encourage people to spend less time on web/SharePoint/whatever “collab” someone bought and more time on the content and knowledge.
I recently was bored at a conference and converted my ancient blog from blogger.com to Jekyll. I ended up spending about 8 hours browsing through themes and an hour maybe actually implementing.
If anything Jekyll is too popular so just a simple blog/list desire was not complicated enough for all the neat templates for businesses. It reminded me of WordPress themes. I also help a few people with WordPress for their business and will eventually try out an SSG on top of the WordPress editor because the people with WordPress will never hand edit a markdown file.
I use Jekyll as well and I agree with all the items that you mentioned.
Jekyll is sufficiently flexible that you can get rid of stuff like dates in URLs so long as you write your own templates. But then you can’t really use templates/themes. I rarely change that sort of stuff so it works for me.
It’s possible, but using the functionality around posts is really helpful. I couldn’t figure out how to get past the _posts folder and yyyy-mm-did file name prefix.
Yeah, unfortunately it’s a bit “all or nothing”.
If you’re interested my blog source is at https://github.com/nickzoic/nick.zoic.org/ (specifically _layouts/article.html and _layouts/everything.html and _includes/sidebar.html )
See also this earlier thread: https://lobste.rs/s/eip181/what_are_people_using_for_their_personal
I wrote my own. I won’t spam you all with a link to it here, but if you click through to my profile, then to my website, and then to my projects page, you’ll find it there.
My engine takes plain text files (so I can write on my phone, computer, or even at work) formatted in Markdown, and turns them in to a static site with a home page, blog and blog archive and RSS feed, and projects page. Other pages are easy to add: for example, I’ve added “Disclaimers” and “Explore” pages recently. All of this is built off a single HTML template file. My site currently contains a little over a thousand pages (~1066); my engine takes less than a second to build the entire thing. It automatically detects new or changed files, so when I’m ready to post something new, I just copy the text file over and run the script. The script takes care of rebuilding the site and deploying it from my home computer. It could just as easily be setup to run on a server, but this way I pay $0 to have a public website on Firebase’s free plan. All told, I’m pretty proud of it.
I wrote my own called Housecat as my first proper project in C. It doesn’t have a bunch of features, but it’s still what I’m using for my blog and works well for my use case.
Does your blog have an RSS feed?
No, sadly. I have been thinking about adding that eventually, but I haven’t taken the time to do it yet..
That’s the drawback of making your own stuff; you can’t just wait for someone else to add features you want.
I use Haunt for my personal site, although the local version of the site is being built with a makefile (hence the lack of recent updates, because I started changed the plumbing and didn’t finish changing the plumbing). Haunt works well and is fast, which is what I need really. My makefile is faster and has less dependencies, but currently loses to Haunt on the working well front.
With regards to your desires, I write all my content in markdown (although I wish I didn’t have to), I can create blog posts and pages separately, there is simple templating, but no server mode.
This reiterates what I’ve been saying the last few times this has come up, but:
I wrote wrt, which more or less covers your requirements and has a layout that I’m fairly happy with.
…but what I really mean by this is: Write your own! There are tons of primitives available, including both libraries in the language of your choice and freestanding tooling like make, Pandoc, etc. It’s a good exercise and the results will be tailored to your needs & wants.
I use Nanoc. I wrote it, initially about 13 years ago, and is still maintained and semi-actively developed. It uses Ruby and does not hide that, and if that’s fine for you, Nanoc could be a good fit.
I’m using nanoc too, and I really like it. Thank you for it, denis.
For my blog, I use a SSG written in Racket called Frog. Last I checked, it ticks all of your boxes.
I use blosxom in static mode but it’s way out of date, unsupported, and is written in Perl.
I too started with blosxom, then changed to loathsxome almost ten years ago. I eventually rewrote that in c++11 as an experiment, and now have both in production.
A Makefile that calls pandoc and an awk script to generate an Atom feed. As a funny side-effect, finding the markdown source of a page is just a matter of replacing the extension (html, md).
Sounds like you might benefit from writing your own with such simple desires!
I used to use Jekyll (appeared to me as the default choice at the time), then my own written in Python, then my own as a Makefile, and currently ikiwiki mostly for directives. Though I have more motivation to implement these than I do to actually write and publish blog posts…
I just manage all of my HTML by hand, it’s a bit of a pain and makes me not want to update my site. So after reading this thread, I’ve been inspired to build my own site generator with Make+Python+Jinja2 :)
I just use Jekyll (migrated to it from Wordpress, migrated to that from a custom Rails thing. I had a post up about it last week.
Jekyll is … okay. I did start going down the writing of writing things myself, but then went to Jekyll, but then ended up writing a lot of my own gems for it … and I’m gonna stick with it for now because it works well enough .. but if I had to do it again, I’d probably just try and write my own.
I use Tapestry which is one I wrote myself, mostly as a toy project but it became used in a number of projects and became a SSG propper.
Cobalt. Fast, rust, does what I need
http://cobalt-org.github.io/
I use Cryogen, and it supports all of the above.
None. I just write the html by hand. With html5 it is just like writing latex, thanks to implicit closing of most tags. I find it actually easier than markdown.
I’ve been using Middleman on my developer blog since around 2013 and have even rewrote my website when Middleman v4 was released. Overall I’ve loved using Middleman, it’s great for blogs and general static sites. It’s simple to get started and has a reasonable amount of plugins.
There are downsides which have made me look elsewhere. Many of the plugins are no longer supported and don’t work. Also, I write blog posts infrequently and I often find when I come to rebuild after a few months that I get dependency issues (due to Ruby). Lastly, I wanted to move to the “JAMStack”, where I can use a separate CMS to write content and then build the frontend statically from that the database-driven content.
Due to this, I’ve had a look through many static site generators recently. Dabbled with writing my own in Crystal, and had a quick go with Hugo, but finally settled with NuxtJS.
Nuxt has a lot of features I don’t need or use, but its key features for me include using VueJS which I’m already familiar with, being able to use a database/API for content, and being able to build to static HTML.
It’s early days so far, and there are certainly some downsides, but overall it’s been a positive experience. I definitely recommend giving it a shot for anyone already familiar with Vue and wanting to build a static site.
I’m a Hugo-covert myself, it’s just way too bloated for my use. Hence, I went ahead and wrote my own, that works just like how I need it to – vite. It’s not as fast as Hugo, and it certainly lacks a ton of features, but it’s mine. :)
I use ssg. It is written in shell and have 180 lines of code, absolutely simple.
Another one for ssg here! Here is site, source, and an example build job.
EDIT: I also added a script to handle meta tags for title and description here
I used to use Hakyll. But I was annoyed by builds breaking as the Haskell ecosystem moved. Since I was not actively using Haskell anymore, maintaining the Hakyll setup became annoying. I have used Jekyll for several years now, it’s boring and, but just works.
I use Hugo for some things and Jekyll for others. If I’m hosting on GitHub Pages, it’s going to be Jekyll if it’s public GitHub. I use GitHub Enterprise at work in conjunction with Drone for CI. Drone has a great ghpages plugin that “just works” so I use it with Hugo for a few internal sites. I’ve got one Jekyll site that builds a Docker container with the site in it, served by lighttpd, and pushes the container to a server that starts it automatically.
I’ve tried a handful of SSGs and almost always come back to those two on the criteria that I find a theme I like most commonly with those two SSG ecosystems.
I’m using BashBlog because I wanted something that was not subject to breakage due to Ruby Gems or requiring a ton of dependencies. It supports Markdown, and there’s a mechanism for meta content, etc. (You specify HTML files that are non-posts, I don’t think it generates them - I don’t really use this feature.)
Out of the box I don’t think it meets your templating requirements, but this would be reasonably easy to fudge in a few different ways. It may not be quite what you’re looking for, but it’s super-simple and has been a nice change of pace for me. Now if I just get around to actually blogging more often…
I use Hugo, but have tried Jekyll and one of its clones before. I suggest just staying with Hugo. I don’t think others will come close. You simply don’t need to use the features you don’t need.
Wrote my own because of the following issues. It makes for an interesting experience and is very easy to build (e.g. mine).
Hot-reloading is one of the dumbest things to write.
It’s basically opening a websocket server that broadcasts a defined payload on every file change, and an embed that’s done on every page head on “debug” mode, that opens a websocket client that tries to login to the server and will refresh when this payload is received.
Out of interest, why are you moving to AsciiDoc?
I don’t like markdown much, but haven’t tried AsciiDoc. Because I’m lazy, what’s better?
Much cleaner and stricter spec, built for extensibility (so no weird tag format everyone has made different), built for writing (with much more block types and contexts, such as quotes, integrated reference links, etc).
Oh nice, I’ll definitely have to take a look!
I’ve made mousikofidi.info with soupault and am very happy with it. I generate the pages from various markdown files that are in a
wiki
branch of the code repo.It hits each of your points, I recommend checking it out. The soupault blog itself is a nice example of how to set up something like that. I have plans to move my own blog over to soupault in the future.
I’ve been pretty happy with Nikola, but like a lot of other commenters I would have to say it’s far from perfect. My reasons are similar too: The default configuration contains a lot of stuff I don’t use, and so the whole thing feels bloated.
Given the fact that (I assume) a lot of us are using static generators for our personal sites, and because we want our personal sites to be … er … personal, I would imagine the “right” architecture for a generator is going to be minimal and highly pluggable.
Have you ever looked into Lektor? It’s more like a static website generator generator with a static CMS plugged in. I used it to compose my (at the moment still tiny) personal website from scratch and let it grow with my needs (sources are here: https://github.com/obestwalter/obestwalter.github.io). I just wrote an article about how I use it: https://oliver.bestwalter.de/articles/website-meta/
Does your site have an RSS feed?
Not yet, but I might add one, when it turns out to make sense. There’s a plugin for that: https://github.com/t73fde/lektor-feed
Pelican, but I’m not very happy with it. It’s not very good for sites which don’t follow a blog format.
Thinking about creating my site in Flask and using Frozen-Flask to generate static content. That should give the best of both worlds - a very simple, and highly customizable solution which yields static content.
Or look into Lektor (also by the creator of flask) - see my answer here: https://lobste.rs/s/javp7g/what_static_site_generator_do_you_use#c_raqvn0
I’ll check it out, thanks.
Hugo works for me! It’s not My Favorite, but the templating is bearable. The Pure Hugo theme is quite nice, and wasn’t too hard to tweak.
As far as your wants, I have seemingly achieved:
And AFAIK everything is in MarkDown. Maybe just get used to Hugo? Unless you’re writing your own, dealing with blogware sucks! I almost went with tcl-ssg, but went with the easy route.
I also use hugo (for now). Love the single binary approach (no ruby, node, python downloading the web BS). But otherwise not really happy with it. I find the way it works not really straightforward for anything beyond the documented standard cases. At times the configuration and conventions are just plain awkward. Horrible templating language.
I’ve run into some problems with zola - but I am keeping an eye on that one for the future.
I’m surprised it hasn’t been mentioned yet, but I’ve been using Gatsby and I mostly enjoy it. It’s certainly designed for projects bigger than blogs, but it works really well for that particular use-case. I really enjoy the fact that it outputs server-rendered HTML that works without JavaScript, but will progressively enhance to a client-side rendered version when JavaScript is available. My primary gripe is how low-level some stuff is, requiring you to manually calculate URL slugs and such. I like that you have the power to do everything manually, but it would be pretty nice to have some stuff built-in.
[Comment removed by author]
I’d be interested in hearing a bit more about this setup? Do you have intermediary pages eg; a list of blog posts or do you just manually update eg; HTML files and so on?
With asciidoc/asciidoctor you can build a reference page using asciidoc syntax (no need to edit html directly).
Example:
It would be fairly straightforward to generate something like that with a short script.
It might be interesting to look at generating a blog with antora as well. 🤔
I did have a brief look at using Antora but I think it has some assumptions that make it difficult, such as that a module (a documentation repo/folder) has a version indicator so you’d end up with something like /blog/1.0/post-name at best?
While I didn’t truly understand it, the feeling I got was it definitely isn’t designed to support a blog, or general website with different categories ie blog, projects etc
I use Middleman, and we also use this for the GitLab website. I myself probably only use a small fraction of the features, but it works great so far. It does struggle a bit with larger websites (e.g. the GitLab website), but I haven’t run into this myself yet. Some examples:
https://nick.zoic.org/ uses github pages (jekyll) but not in a purely jekyll-y way, eg: there’s no dates in URLs and so on. I found it pretty easy to work out how to do this, and I like that I can just push minor changes with not local toolchain. It’d be pretty easy to drag this over to some other provider or a raw bucket of files if I needed to leave github.
Previously it’d been running under Pelican and S3, and before that it was running on a
Makefile
andrst2html
based script I wrote back before static site generators were a big thing …ikiwiki. Ostensibly a static wiki but can be used for other things like my personal site including a blog. I’ve been using it for ten years. I’ve been considering replacing it but nothing is as flexible. Hakyll looks most promising but needs a lot of work (started here).
For my homepage and blog, I’m using a moderately sized Python program that generates content snippets as HTML via pandoc2 from markdown files, because pandoc is the best markdown processor out there by a huge margin, I can even typeset formulas via embedded latex and Mathjax with it… The config file is also a hand full of Python lines. With jinja2 templates, the HTML snippets are combined to form blog entry pages or regular pages. I also wrote jinja2 templates to generate RSS2 and Atom feeds (ca 50 lines each) and 11 lines of template code to generate a sitemap, turns out jinja2 is really productive once you get the hang of it… So far I’ve been too lazy to polish this up and release it, mostly because there are so many static site generators out there already, that another one is probably not badly needed by someone else than me ;-)
I use one called
poole
. It seems to be unmaintained though: https://bitbucket.org/obensonne/poole/pull-requests/I recently raised a PR to fix some Python3 stuff, but it has just sat there…
At the moment, I’m using Jekyll with the
jekyll-asciidoctor
plugin since it’s officially supported by the Asciidoctor team.I was using Hugo which passes the
--no-header-footer
flag to Asciidoctor under the hood. I think I found this annoying but looking back, maybe it’s fine to just reference eg;{{ page.title }}
in my HTML templates?I try to think as little about this stuff as I can, as its at the expense of making actual content, but I pretty easily succumb to tooling alcoholism
I use Pelican for nblug.org. I’ve been quite happy with the choice, as it was easy to write a few custom plugins. One processes custom metadata to assign Drupal-compatible URLs to old posts (cool URIs don’t change!). The other generates an iCalendar feed.
Hugo users: you might want to take a look at the feed Hugo generates. I’ve seen Hugo sites that have non-public pages and draft posts there.
I wrote my own in Lua years ago, but I would recommend that you take a look at Frozen Flask if you don’t know about it yet. It works a bit differently from usual SSGs and gives you a lot of flexibility.
I’m happily using Nikola …. which fit my own requirements of being simple, python-based and supporting rst/markdown.
I tried a million things (WP, Drupal, MediaWiki Hugo, BlueFish). I recently figured out I don’t want anything more than something I can toss up some text and images on. I just started using CherryTree the note-taking application then I export to HTML. Taking that export into a directory I sync to my domains www server. Super simple for me and I am done haggling over one of those other packages for now.
Jekyll for my personal site but I have used Gatsby and Hugo as well. I tend to prefer Jekyll for simple content related stuff as it is easy to extend, has a huge established community and is really easy to pick up.
I use F# almost exclusively, so Fornax is my personal fit.
This is not an answer to OP question, but I would like to add a question, if I may.
Which static generators (if you know) optimize for users with restricted eye site, color blindness and/or restricted motor skills?
For example, a friend of mine has Parkinson, and I can see how difficult its to navigate with mouse across the whole screen just to select next/particular article.
The SSG itself doesn’t have as much to do with that as the theme does. You can look through JekyllThemes.org for example, and see that the size, placement, and behavior of the UI components are completely changeable. I assume the same is true for others as well, but I just use Jekyll, because it’s the GitHub Pages default and I’ve never cared to try anything else.
I ended up writing my own (https://github.com/waferbaby/dimples) to suit my needs/OCD.
Like everyone else, I wrote my own site/blog server. It’s not a static generator, though. It’s essentially just markdown and json files, read on the fly and rendered by a simple node app.
Writing your own thing is fun, and you get exactly what you want.
Oh man I love all those personal sites linked here. Added a lot to my RSS reader, thanks everyone!
To pitch in, I wrote my own in Python for my site 1 over five years ago. It evolved over time, which you can read about in a few articles I wrote on 2.
My site uses Minisleep. Video & screenshots at the top of the linked page. Self-written & published in the hope other people find it less of a time-sink than other static website/wiki/blog engines.
From your points:
My own points:
“A good website engine should help you save time, not take your time away. There is a reason you are not using Sharepoint”
Wow I’ve just realized Lobste.rs are everything else than the web …. not a single GatsbyJS mention which is perhaps now the most popular due to React
I use a simple bash script I wrote a handful of years ago. It parses posts written in markdown and combines them with html+css template files.
I’ve looked at replacing it, with for example Hugo, but I find that most alternatives have too many bells and whistles for this simple use case.
I used to use Hugo but it became too bloated and I write my own tool: baja[0] . Here is a demo of my sites[1] and my company[2]
I hacked one together with pandoc and makefiles. ¯_(ツ)_/¯
I’m using frog but I am considering writing my own as I want my SSG to actually be a desktop gui app.
I’m using an old version of hugo and never upgraded with the last change that seemed breaking at first glance.
It builds https://f5n.org (with my own theme) - I’m totally happy.
I use Jekyll. It was the most straightforward approach to get something working and to improve upon.
It is likely that I try Hakyll one day when wanting to do more complex stuffs. Not for the moment.
I used Hugo some time ago, but last year I moved to pure
org-mode
. It is a weird step to take, since most of the features that one could take for granted in Hugo can turn in some yak-shaving in Lisp. However, since I didn’t use most of them, it works just fine for me and I learnt a lot about Emacs Lisp with it.Jekyll. Even though it’s confusing and bloated, it’s natively supported by GitHub pages, and that’s important to me.
Right now I’m using something homemade, using client-side JS for markdown rendering. Project site is here. The rationale was that every SSG comes at a cost: You have to install the generator itself, and that can me cumbersome when quickly wanting to update things. Client-side things have a large problem for SEO, so I may change (again) my setup in the near future.
One interesting project I stumbled upon though, is precis, that uses git hooks to generate the ToC/arborescence. It look nice too.
I know this is a bit far of your desires, but I thought precis would interest some people interested by tiny site generators / content managers.
Bash and a weird Elixir SSG.
I think everybody should just write their own SSG and tweak it to their heart’s content.
Come to think of it, that’s what I did in 2003 or so. Static web pages glued together with bash. This was on the upswing of blogging, so I was missing features like comments and stuff, and was overjoyed to get a shared space on a MovableType install.
I’m increasingly of the opinion that comments are a liability on a blogging system–a misfeature, a shiny thing that at best collects bots and at worst actively worsens things.
I kind of figure that blogs should be generating documents that can be standalone and shared as such.
Self-made with Python: http://beza1e1.tuxen.de/gen.py.txt
My own in Ruby, and recently pandoc+make.
I used Hakyll in the past, mainly as an excuse to do some Haskell. But after a while it turned to a black box and I wasn’t sure how to maintain it, or hack on it.
I rewrote it recently to simply use a mixture of Pandoc and Tup. Not as powerful but I am much more efficient at tweaking it.
Here it is.
nunjucks https://mozilla.github.io/nunjucks/
fast, simple, no bs
I wrote my own one 19 years ago in C++, combining a markup language, an HTML page generator, a link checke (every page/image shall be refered by at least another page, no locally broken links, etc), google ads macros, statistics and differential FTP updates. Last minor revision was 13 years ago, last bugfix was in 2008, and I’m still using it. Thing is, code is so ugly I’m afraid to publish it.
One comment line at the beginning recommends:
Which reminds me of a generator I once used ~20 years ago, ppwizard. Turns out it still exists, accompanied by a 90ies site:
http://dennisbareis.com/ppwizard.htm
I’m interested! Ugly code is just fine. Would you consider putting it up on Git* or similar?
I use athena, but update my blog like three times a year, so.
I’m using Vuepress for my current personal site and while it’s surprisingly slow to do a full site build[^1] the end result looks good (IMHO of course), scales nicely to a wide range of screen sizes, and supports media embeds and syntax-highlighted code plus some nice-to-have things like text-based :emoji:, a bunch of markdown extensions, and automatic feed+sitemap+useful meta/head tag generation out of the box.
I also spent a couple of months getting up to speed on modern JS tooling, Vue, etc. before adopting it so the degree to which I think it “just works” should be filtered through that lens. Six months ago I probably would have looked at the setup instructions and a tutorial, scratched my head for a minute, and gone back to something I could build + invoke using
make
. It works well for my current needs + steadily growing desire to do more experimentation in FE-land alongside my boring text publishing, though.[^1]: The speed might be my fault, as I haven’t exactly been ruthless about trimming the plugins and Vue components I import + use on my pages, and I certainly haven’t done any proactive work to optimize build times.
I use Hugo for my website and overall it is pretty nice. Though, it does seem there are a lot of bugs in major releases that are quickly fixed in point releases. I’ve had to change a few things too as the overall aspect of the software changed from just blogs to generic websites, but they were not huge changes.