this post was submitted on 21 May 2025
70 points (96.1% liked)

Selfhosted

46671 readers
468 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
 

I ran my own blog for many years but recently I suspect my server got hacked, and after reinstalling I want to do things a little differently.

I'd like to move away from PHP and I don't really need a dynamic CMS anyhow.

So far I've been using PicoCMS which serves content from markdown pages with a little header. I got quite good at it, wrote my own theme and a few plugins. The templating language is Twig so something similar would be a boon for me.

Writing content in markdown is my most important requirement, or rather reusing the existing pages with as little massaging as possible. Here is one example:

***
Title: Create WiFi Hotspot with NetworkManager
date: 24.11.2022
Tags: archlinux,android
template: post
***

# Make sure required depenencies are installed

blablablablablablablabla

I really want a tag cloud, which used to be my only sorting mechanism apart from date. Most generators, at first glance, offer a tags page. Honestly I have no idea if I'd have to template the cloud myself but tag functionality seems to be common, I guess?

What I don't want is any sort of web UI or even builtin server functionality or other bells and whistles for the user. I prefer to ssh into the server and do things on the CLI.

Now my most important constraint is that I want to use what's available in (or as a) Debian repositories. After a quick search around it boils down to:

Searching for similar topics I found this and this. I read all the comments.

TIA


edit: Lots of people mention Hugo. Why would I choose that over, say, Jekyll or Pelican?
Personally I feel drawn more towards Python than Go or Rust, and a Twig-like (e.g. Jinja) templating language. If that's idiotic, please let me know why.
Also please remember I'm not running a github (or other similar VCS) page but have a dedicated VPS running Debian Stable. Deployment or containerization are of no interest to me.

top 50 comments
sorted by: hot top controversial new old
[–] mutual_ayed@sh.itjust.works 11 points 1 day ago (1 children)
[–] A_norny_mousse@feddit.org 5 points 1 day ago* (last edited 1 day ago) (2 children)

~~wrt~~ With regard to all I specified, why?

[–] mutual_ayed@sh.itjust.works 7 points 1 day ago* (last edited 1 day ago) (1 children)

https://blog.cubieserver.de/2020/adding-a-tag-cloud-to-my-hugo-blog/

Fast, secure, bundled how you want and integrates easily with caddy and git runners.

https://docs.gitlab.com/tutorials/hugo/

Also is easily run in a container locally and deployed to a VPS or anywhere you like. Uses native markdown and is still actively developed.

https://www.erraticbits.ca/post/2019/blog-hugo-gitlab/

[–] A_norny_mousse@feddit.org 0 points 1 day ago

I'm skeptical because it seems tied to the github universe.

And here's what other people commented about Hugo:

  • "It gets admittedly more complex if you’re wanting to write your own theme though."
  • "But as soon as you do want to customize it, you’re stuck learning one of the most esoteric languages that wasn’t meant as a joke."
  • "The documentation is unclear and there’s a chicken and egg problem about how to learn Hugo."

What do you think?

[–] gofsckyourself@lemmy.world 3 points 1 day ago (1 children)
[–] bagelberger@lemmy.world 7 points 1 day ago (1 children)
[–] gofsckyourself@lemmy.world 3 points 1 day ago (1 children)

I thought that might be what they were saying, but then it would be "with regard to to" so I was unsure.

Initialisms like this bug me because they cause confusion for the most minimal amount of benefit.

[–] 3abas@lemm.ee 2 points 1 day ago

I was hoping to find an answer the original question in this dialog.

[–] thagoat@lemmy.sdf.org 7 points 1 day ago* (last edited 1 day ago)

Hugo. Most definitely. I use it for 5 different sites. The syntax is easy. Posts, pages, etc are in easy markdown. Compiles your site (directly to your web root if you like) in under a second. It's awesome.

[–] nycki@lemmy.world 7 points 1 day ago* (last edited 1 day ago) (1 children)

11ty is my favorite! cross-platform, good defaults, built-in tag support, and just generally good learning curve.

[–] non_burglar@lemmy.world 2 points 15 hours ago

Eleventy is my goto as well. It builds a really, really static site. Perfect for posting practice writing, photos, and notes from the steps I take doing my homelab.

[–] shiftymccool@programming.dev 7 points 1 day ago

Not sure if this will work for you but I keep my homelab documentation in markdown, mainly edited with Obsidian. I wanted an easy way to access via web and found Perlite. I have this pointed at a notes folder on my server which is auto-updated with Syncthing. No fuss, just works

[–] anotherandrew@mbin.mixdown.ca 6 points 1 day ago (2 children)

This is a post near and dear to my heart. I too am looking for something markdown-centered, static, reasonable for code/technical content and that can embed not just photos but browser-side js graphs based on data within the markdown or REST calls. It's been a few years since I went down this rabbit hole and I got lost very quickly. Thank you for posting, I'll be revisiting over the next few days to see what the fediverse has to say!

You may want quarto. It is explicitly designed for data science and related usecases, and has ample support for the graphs those usecases need.

[–] abruptly8951@lemmy.world 2 points 1 day ago (1 children)

I use sphinx with Myst markdown for this, and usually plotly express to generate the js visuals. Jupyterbook looks pretty good as well

[–] anotherandrew@mbin.mixdown.ca 1 points 1 day ago (1 children)

That sounds pretty great - do you have a link to your site using this?

[–] abruptly8951@lemmy.world 2 points 1 day ago

Unfortunately not, here is a little kitchen sink type demo though https://myst-nb.readthedocs.io/en/latest/authoring/jupyter-notebooks.html

Myst-nb is probably the place to start looking btw - forgot to mention it in previous post

[–] barkingspiders@infosec.pub 5 points 1 day ago

Also curious, have a similar project in mind. I've tinkered with jekyll a little and heard good things about Hugo. Hopefully people can speak to some of these.

[–] manxu@piefed.social 5 points 1 day ago (1 children)

I went the same direction, from WordPress to static site generation. I did the same evaluation as you are trying to do and ended up with Hugo, mostly because there is a lot of support available for it. My runner up was Pelican, because I was fluent in Jinja2, but I didn't want to mess around with the templates and Hugo's were prettier. Sue me, I am shallow.

The one regret I have about Hugo is that the templating language is challenging. I am trying to be as neutral as possible, but it seemed like even simple things were complicated to achieve. If someone would come up with a Hugo that speaks Jinja2, I'd be really delighted.

Other than that, conversion from WordPress to Hugo was relatively straightforward, despite needing to find a gallery component and converting menus. Hugo is indeed very fast in processing, which become important when your blog has thousands of articles.

I set up the blog as a private git repository. The server pulls from it, then runs Hugo and a full text search engine, and the content is visible and searchable within five minutes on update.

[–] A_norny_mousse@feddit.org 2 points 1 day ago (1 children)

My runner up was Pelican, because I was fluent in Jinja2, but I didn’t want to mess around with the templates and Hugo’s were prettier.

I think you're the first one mentioning Pelican. Apart from the theming, would you recommend it? I'm familiar with Twig.

needing to find a gallery component

Oh yes, that would also be relatively important to me. Again, does Pelican offer that?

[–] manxu@piefed.social 3 points 1 day ago

There must have been a gallery component, since I only looked at generators that had one available.

Honestly, in hindsight the templates were really not a big deal. Just for fun, I tried converting the Hugo template I used to Pelican, and it was easy for me.

Pelican is solid and mature and I would use it, in hindsight. The only major flaws are that it's much slower (but makes up for it with incremental builds) and that the community is much, much smaller. On the plus side, Jinja2 is much, much, much better than Go templating (Hugo borrows from Go).

[–] liliumstar@lemmy.dbzer0.com 4 points 1 day ago (1 children)

I would also recommend Hugo, and believe it meets your requirements. The header markdown looks very similar to what you wrote, and it has tags. I'm not sure about a tag "cloud" the way you imagine it, but it's worth looking into.

[–] A_norny_mousse@feddit.org 1 points 1 day ago (1 children)

Isn't it overkill? I'm also skeptical because it seems tied to the github universe.

And here's what other people commented about Hugo:

  • "It gets admittedly more complex if you’re wanting to write your own theme though."
  • "But as soon as you do want to customize it, you’re stuck learning one of the most esoteric languages that wasn’t meant as a joke."
  • "The documentation is unclear and there’s a chicken and egg problem about how to learn Hugo."
[–] liliumstar@lemmy.dbzer0.com 1 points 14 hours ago

Admittedly I've only used it with a preconfigured theme and no need for real customization. If you do need those features, I'd imagine the other commenters are correct.

[–] moonpiedumplings@programming.dev 4 points 1 day ago* (last edited 1 day ago) (1 children)

I use quarto: https://quarto.org/

The big thing I like is that it has fulltext local search, built in and easy to enable.

Search is possible on hugo, but it's not built in, you have to get a plugin, etc etc. Same for many other options you mentioned.

Heres my website: https://moonpiedumplings.github.io/

[–] A_norny_mousse@feddit.org 2 points 1 day ago (1 children)

The search is nice, certainly a good thing to have in a blog. It has interesting features, most of which I'll probably never use. No theming afaics but I'm sure that can be remedied. Your end result certainly looks nice enough.

Why would I otherwise sway from my hard requirements to use this? It is not in Debian's repositories. However, a simulated install suggests that it has all dependencies bundled. What's it really based on? Python I guess?

[–] moonpiedumplings@programming.dev 2 points 1 day ago* (last edited 1 day ago)

Quarto has theming via several built in bootstrap themes.

Quarto is written in javascript.

Also, it has no template engine/templating. I have a nasty hack where I write python code blocks (vua quarto's ability to execute code blocks) to output markdown that can be remdered to both html and pdf, which is pretty unique. But this is probably not what most people making a website want.

[–] eutampieri@feddit.it 3 points 1 day ago (1 children)
[–] A_norny_mousse@feddit.org 2 points 1 day ago* (last edited 1 day ago)

Why would I choose that over my requirements? C'mon, just throwing names isn't enough.

What templating language does it use?

[–] just_another_person@lemmy.world 3 points 1 day ago (1 children)
[–] A_norny_mousse@feddit.org 1 points 1 day ago

Why would I choose that over my requirements? It's not in Debian repos.

[–] macallik@federation.network 2 points 1 day ago (2 children)

@A_norny_mousse@feddit.org Personally, I use Zola. It is written in Rust and my understanding is simpler/more minimalist than Hugo. They are not in the official repo, but they do have a .deb package on Github https://github.com/barnumbirr/zola-debian (main page: https://github.com/getzola/zola) and they have a forum in case you have questions.

[–] A_norny_mousse@feddit.org 1 points 1 day ago

Thank you! instead of the deb package or building it myself, I just downloaded the lastest from their github. It is one executable, and seems to be working fine so far. Not saying it's my choice, but it's easy enough for a quick test and the templating language looks very familiar.

[–] monoboy@lemmy.zip 1 points 1 day ago

I use Zola too. I chose it because it is like a simpler version of Hugo and it has a much easier templating engine (it's similar to Jinja2).

[–] gabmus@lemm.ee 2 points 15 hours ago (1 children)

I use hugo a lot, I also made my own static site generator called Rubedo which is very similar in concept to hugo and other similar SSGs, but with much more of a "batteries not included" approach. The idea is that existing SSGs are nice but if you're trying to build something that is not a blog or blog-like thing it starts getting cumbersome, and that's where rubedo comes in.

I think most people here (me included) suggest hugo because it's simple very well supported, although not without its issues: the templating is a bit obtuse and again if you're trying to diverge from the "blog" archetype you're gonna need to do some trickery in my experience (I made a quite complex theme for hugo so I would know).

If you're feeling like messing around with a different approach and doing more work you can try out rubedo, maybe even open an issue or two along the way. Another thing that you might like about it is that rubedo uses Tera for templating, which is heavily inspired if not mostly identical to jinja2.

[–] A_norny_mousse@feddit.org 1 points 14 hours ago (1 children)

Isn't that the same Zola uses?

Please riddle me this: why are there at least three templating languages - Jinja2, Twig, Tera - that appear to be identical, yet distinct?

[–] gabmus@lemm.ee 1 points 9 hours ago

They're template engines, not languages. They use a language and different engines may have similar if not identical languages.

There are multiple engines because each engine is usually made for a specific programming language: jinja2 for python, tera for rust and idk about twig.

[–] thequickben@lemm.ee 1 points 14 hours ago

Docusaurus. It supports markdown, and you can also use JavaScript if you like.

[–] floquant@lemmy.dbzer0.com 1 points 1 day ago* (last edited 1 day ago) (1 children)

Astro may also be worth looking into if you'd like a SSG that is still capable of rendering some dynamic content

[–] A_norny_mousse@feddit.org 2 points 1 day ago

Interesting. Big Names.

It's based on some js framework, right? Probably pulls in Gigabytes of dependencies.

Why would I choose that over my requirements? It's not in Debian repos.

[–] OmegaLemmy@discuss.online 1 points 1 day ago (1 children)

I like Hugo, though it's been the only one I used. May get too involved, and some themes have features others may not have, for example, comment integration may not exist for some themes.

[–] A_norny_mousse@feddit.org 1 points 1 day ago (1 children)

That's usually fixable with templating. What sort of comment integration? Some third party I guess?

[–] OmegaLemmy@discuss.online 1 points 1 day ago (1 children)

Self host and third party exists. You probably could use Lemmy as a shoddy way to make comments too

[–] A_norny_mousse@feddit.org 1 points 1 day ago (2 children)

Self host

On a static site generator? Can you link me to that please?

What about Hugo's templating language? It's been said to be daunting:

  • "It gets admittedly more complex if you’re wanting to write your own theme though."
  • "But as soon as you do want to customize it, you’re stuck learning one of the most esoteric languages that wasn’t meant as a joke."
  • "The documentation is unclear and there’s a chicken and egg problem about how to learn Hugo."
[–] moonpiedumplings@programming.dev 3 points 21 hours ago* (last edited 21 hours ago) (1 children)

Alright, this is gonna be long.

Firstly, yes, different static site generators have different templating langauges. But just like normal programming languages, it is easy to transition from one templating langauge to another. If you take a look at the syntax:

Not drastically different, but reading the docs, they are all similar enough, and easy to learn.

I wouldn't call go's templating language "esoteric", but it should be noted that jinja2 is has other uses, most notably it is the templating engine that Ansible uses.

As for the docs... This could probably be a blog post by itself.

Firstly, take a look at this website: https://killedbygoogle.com/ . Google has created and then killed 296 projects, many of which were actively used and working. Why?

This is because, internally at Google, you get promoted if you either A: write software, or B: add more features to software. So what happens is people write software, get promoted, and then realize they don't get paid more if they actually maintain that software, so they just kill it. Also, they forget to write documentation (because it doesn't pay more or get you promoted).

Hugo, is by a Google Engineer, and it shows (or at least, it used to). Software by Google has two distinct characteristics (actually 3 if we count being written in Go).

  • It has every feature you could ever want, even stuff you haven't heard of
  • And it's poorly documented. Or not at all lmao.

But, "being poorly documented" is not a permanent fixture of this software, but instead something that mostly persists for as long as it's Google software. Often, these projects get "adopted" by the wider community, who fixes up their documentation. Looking at hugo's docs, it doesn't seem be nightmarishly bad, especially for the core, main set of features. Like the setup docs appear to be clear (although a more complex process than alternatives).

But like, for search options: https://gohugo.io/tools/search/ . That google software pattern continues. There are like 10 options on the page, and no docs from hugo on their usage/installation lol.

Anyway, I would recommend eithier Pelican or Jekyll, given your requirements. Because everything you write is in markdown, it will be fairly easy to move from one static site generator to another, even if you are dissatisfied.

Also, kinda sorta relevant:

collapsed inline media

(source)

But the point I'm trying to make is the same. Don't agonize over selecting the perfect static site generator.

[–] A_norny_mousse@feddit.org 1 points 14 hours ago

Thanks for the breakdown, this is really helpful.

It kind of confirms my unclear suspicions concerning Hugo.

Looking at its templating language, it looks daunting.

Looking at Jinja, it looks identical to Twig. There's at least one other templating language that is almost identical. I wonder why that is, or where the actual differences lie (not the underlying mechanics, but the spec).

What I thought was my biggest requirement actually isn't: I tried Zola yesterday, it is not in Debian's repos, but it's a single executable, unzipped straight from their github and Just Works. Everything becomes easier when you don't have to worry about software that connects to the world (assuming the generated HTML is 100% safe of course).

But I'm also trying Pelican. I don't care if it's slow.

[–] OmegaLemmy@discuss.online 1 points 1 day ago

I was fighting with my linter tbh still have no clue how to write html in go like its php

And, for the comments part, I haven't looked into it, it's likely just a JavaScript file that connects to your server or an external one and pulls all data and whatever, its the single dynamic part and it's done with js

[–] sith@lemmy.zip 1 points 1 day ago (1 children)

If you're into GNU/Guile Scheme, there is also Haunt: https://dthompson.us/projects/haunt.html

[–] A_norny_mousse@feddit.org 2 points 1 day ago (1 children)

GNU/Guile Scheme

What is that?

Why would I choose Haunt over my requirements? It's not in Debian repos.

[–] sith@lemmy.zip 1 points 1 day ago

It's the language of GNU. And a scheme. That's also why you would choose Haunt. It's probably not for you.

https://www.gnu.org/software/guile/