Bonus points - be able to personalise a little bit the look and feel if I wanted to e.g. font
No need for: - comments on blog posts
What are my options?
If you're looking to get started right away and don't care about having it hosted by someone else there's also bearblog[2] which I can recommend btw.
* draft in markdown
* render in HTML (using any Markdown to HTML tool, e.g. pandoc)
* link your CSS in the HTML file.
* push to your preferred serving platform
This has the advantage of getting you started as quick as you can open an editor.
If after 5 posts you are wanting a tool, pick whichever (Hugo).
- Jekyll: the OG, but requires a ruby toolchain.
- Hugo: compiles to a single static binary, but you may have to get used to its (Go text/html) templating.
- Zola: also compiles to a single static binary, but uses Jinja-like templating.
- Gozer [^1]: my own, like Hugo, but 1000x simpler. I rolled my own because I wanted something that didn't move under me in the next 10 years and just because it was fun and easy enough to build.
(I host it on Netlify with a custom domain for free and Netlify builds a new release every time I push to main).
If you want to go as minimal as possible, my https://github.com/Siilikuin/minimum-viable-hugo gets you set up with a single no-CSS, no-JS HTML page. I found this pretty ideal for staying to learn the platform.
If you really, really like minimalism, you could also try pandoc-server to dynamically serve HTML files from your Markdown as people visit the page, just like PHP does: https://pandoc.org/pandoc-server.html
What I'd love to do is totally remove the SSG from this pipeline and replace it with a WYSIWYG editor (blasphemy, I know). Or at least something that I could just drag and drop images to so I don't have to manually link them in the .md files.
I'd also like to totally remove the CSS from my site and just link to an existing theme served by a CDN somewhere, like if there was a "standard" simple theme with same defaults and platform-specific font choices etc. (ie. how it was supposed to be near the beginning where users would get served markup (via HTML) and then be able to theme it as they desire (obviously still possible but very few people do this).
Micro.blog looks interesting but the themes aren't quite as minimal as what I prefer.
I use Hugo with a theme called Congo. https://gohugo.io/ https://github.com/jpanther/congo
I have no reason to recommend this other than its worked for me for 10+ years. It's perfectly fine. I am not even much of a Rubyist, it's 100% an accident of history.
I create/edit posts on Github directly, in master. They publish when they get a timestamp attached to the markdown file. Even when published, I only share around to a few friends for feedback and typos before sharing more widely.
As someone who used to tweak his Jekyll installation endlessly, I find obsession with tweaking/exploring/creating blogging platforms a sort of procrastination to avoid the actual blogging part ;)
For a technical person, it does the job pretty well and almost without any maintenance effort:
- Github: https://github.com/TCGV/Blog
- Live: https://thomasvilhena.com/
Additional suggestions outside a specific tool:
* Inevitably you will need more than base Markdown supports features, so you’ll either need to buy into a specific Markdown fork (some of which aren’t open) that won’t port to other platforms if you need to migrate, script the hell out Pandoc or some other tool creating your own fork, or you could start with a lightweight syntax like reStructuredText or AsciiDoc that have a more comprehensive base supporting 98% of your needs including proper metadata in the file, image sizes, figures, callouts/admonitions, spans with class names, definition lists, details/summary, footnotes, citing blockquotes; building these ad-hoc will suck to maintain & could output bad semantic markup making it difficult for screen readers, TUI browsers, web crawlers to parse & understand
* Don’t do syntax highlighting on the client side for a static site (e.g. no highlight.js or similar)
* Don’t touch the base user font size for a blog as users should be able to override font size for their accessibility (e.g. no body { font-size: 14px })
* Add an Atom and/or RSS feed
Throwing my own suggestion into the ring, as I was just looking into this last week.
I started setting up a blog using Hexo. It’s another Node based SSG that uses markdown and supports tags. It has a lot of neat plugins that people have developed, too.
I like it so far!
A SvelteKit[0] app hosted on Cloudflare pages. The repo is hosted on GitHub and hooked up to the Cloudflare Pages app [1]. On PRs, I get preview environments. On merge, the changes get deployed to my "production" website. I write blog posts and other content in markdown, which is then processed by mdsvex[2] with very minimal setup.
Mostly, my requirements were more focused around getting the actual framework, hosting, etc. out of my way so that I could focus on writing. Gatsby and Next.js were too configuration heavy and turned me off once I scratched beyond the surface.
[0] https://kit.svelte.dev/ [1] https://developers.cloudflare.com/pages/configuration/git-in... [2] https://github.com/pngwn/MDsveX
[1]: https://jaspervdj.be/hakyll/
[2]: https://pandoc.org/
- Jekyll(any static site generator would do, I'd probably pick Zola or Hugo if I was starting from scratch. See list[0])
- GitHub to host source code
- GitHub actions to push resulting assets to S3(Would try R2 over S3 if starting from scratch I think)
- Cloudflare for TLS, edge caching(including HTML[1] which is nice)
The source for my blog is: https://github.com/k0nserv/hugotunius.se. I also made a starter template[2] at some point, but it's quite out of date now.
0: https://github.com/myles/awesome-static-generators
1: https://hugotunius.se/2020/01/01/edge-cached-static-sites-on...
Svekyll is the simple conventions of Jekyll but the dynamic power of Svelte. It's nothing more than a package.json file and a posts directory with Markdown files.
Svekyll gets all 100s on lighthouse. Mostly because each generated blog post is a single HTML file with all the JS inlined. But, you still can do anything you want as it is a Svelte app. Because it is a bunch of html files, it is easy to host on any web server, no backend customization required.
Someone else mentioned publishing via email. I do that too using my hosting service extrastatic. You can email a draft and it gets converted to markdown and then placed into the git repository for the blog.
Svekyll is open source: https://extrastatic.dev/svekyll/svekyll-cli. You could definitely host on GitHub using a GitHub action to build and publish it.
Let me know if you want assistance: chris@extrastatic.com
The most simple thing I could think of would be asciidoc + github pages. Write stuff, generate output HTML, push all to repo, wait for sync. Done.
It’s got everything you need except it’s not possible to edit posts. You just have to email yourself a new, updated version and make that version public.
Taught me a lot about serverless, SES, css, and htmx. 10/10 would recommend trying this route if you don’t want to use the standard toolsets.
It comes with a companion site [2] that shows how to get scheduled posts, comments, etc. working nicely.
[1] https://github.com/SeanKilleen/blog-in-a-box-container/ [2] https://bloginaboxdemo.com/
Hope this is helpful!
If not for Emacs, I'd probably glue together a few tools like Pandoc, sedm scp and the like.
Problem being, everyone has one "must have" feature that they want along with the light-weight solution. And for every writer that "must have" feature is different.
When you join all the single, one-off "must haves" together you end up with Microsoft Word.
As for blogging platforms, I use wordpress.com. Paid, not free. No work at all on my end apart from writing. Haven't thought about the platform in a long while now.
I jumped from WordPress to Mataroa and I'm also using Jekyll, Hugo, Zola, and Obsidian to blog.
There are a lot of great things about Mataroa that I love. I've blogged about Mataroa: https://pivic.blog/blog/mataroa/
Please review the link for further details on Jamstack and/or SSG. https://nishad.link/posts/getting-started-with-jamstack/
Consider exploring Htmx if you don't want markdown or don't want to deal with npm..
I converted my WordPress blog to Eleventy 4 years ago and never looked back, it's been delightful!
Beautiful, performant, native support for editing via Obsidian. I use it for my personal side, https://thestu.art
Type markdown, build in docker, publish assets to GitHub Pages :tada:
- npm / js-based tooling, no fooling around with ruby - plenty of great docs - enough public adoption to find good answers to common things you’d like set up
Not sure why I hadn’t tried it before - I know it’s been around for a while.
I've been searching for some time also, more or less the same requirements, and I settled on quarto. Give it a try, you won't be disappointed!
I use it for my personal blog, it supports custom domains and it's uses public key authentication.
write it in markdown and host it anywhere, no fancy shenanigans
It helps you get focused on just writing while removing all the unnecessary stuff.
$5/month, I am a customer and have liked the experience. also self-hostable for free.
The site can be hosted directly on github pages and you can configure the custom domain on github. Fairly easy to setup and use.
Comes out of the box with GDPR compliance, google analytics and cookie consent
just php. nothing else is needed. flatfile database. you can personalize it easily. it exists since 2006 and it still maintained. boring, it just works.
[1] On the homepage [a] I needed some excerpts from the post to appear underneath the title. I also wanted this excerpt to show up in the RSS feed.
[2] Since I think of my posts as live documents - if I remember a new detail, I add it to my posts, because more than anything else my blog is notes for me -I also wanted to add a "Last major update" date to my posts - you can see this appear over the titles (the date after '||') and at the top of individual articles. I wanted this to be manual because I didn't want this date to change because I fixed a typo etc.
[3] Since I'm interested in technical articles, I wanted a good way to cite papers. I use jekyll scholar [b] for the purpose, and if you look at the last 2 articles on my blog you'll see the outcomes it produces.
[4] I also wanted my article URLs to be concise instead of the jekyll default which has year, month, day as part of it - this was a fairly easy change to make as well.
[5] Linking to a different section in an article or a section in another article without using the public URL (because this might change if for some reason I end up with a different namespace tomorrow) - this is also possible using variables, whose values get (re-)generated every time you change the document markdown.
[6] Before I push the article to github I usually have it served for a while (typically a few days) on a local server on my laptop (you don't have to install a separate server - the jekyll build system bundles one, this is how you locally see what the article would look like) which I proof-check from different devices while in the house, e.g., from my mobile when I'm not at my desk. Its convenient.
[7] Of course, support for MathJax.
[8] Lot's of themes to pick from. For ex. Al-Folio [c] is a minimalist theme that seems to be becoming popular for academic writing.
I'm sure some of the other solutions do most of these, but I wanted to draw your attention to the ease of customizability.
[a] https://blog.quipu-strands.com/
[b] https://github.com/inukshuk/jekyll-scholar
[c] https://github.com/alshedivat/al-folio?tab=readme-ov-file
When you’re on Github, use its IDE by pressing the . key. You can, of course, use Git and edit the files locally.
Own and maintain these two folders _posts and _assets. If you are going to write regularly, I suggest creating sub-folders inside _posts but name your Markdown files by date such as 2024-02-5-foo-bar-is-my-file.md.
On Github, use Github Pages (officially powered by Jekyll) and deploy using one of the pre-defined Jekyll Themes[1]. That’s it, your blog is at reponame.github.io which you can CNAME it from a domain you own just like I did mine at my-domain.com.
Comments: You can either use Github Discussion as your blog’s commenting system or embed a third party service which you can export and carry around when you change such services. Honestly, and personally, I don’t want to deal with comments these days.
Now, for the customization, the themes are in simple Jekyll[2] which you can play around with. In future, if you want to move from Jekyll to something else, you just have to worry about that _posts and _assets folder. They may have different naming convention but you can just config-managed it or change it to your choice. This is why I suggested owning that two yourself.
You also may not worry about FrontMatter[3] (meta in the header) and its accompanying jazz by asking Jekyll to use the plugins jekyll-optional-front-matter and jekyll-titles-from-headings. These comes as part of the officially supported Jekyll plugins[4] by Github. That way, you are just writing a human-readable plain-text spiced up with Markdown and readable by almost every other Static Site Generator. You can use your favorite IDE or another Markdown editor such as Obsidian to edit your files without ever running Jekyll locally.
Now, play with the _config.yml that Jekyll generates for you from the theme above to define your post dates, navigation, and others. Jekyll is one of the OGs — the Gandalf of Static Site Generators. If you have a problem, someone somewhere has solved that.
If you really think of it, “there is no spoon”, eer, I mean “Jekyll.”
Did I missed something? I was supposed to write a blog article for my website on this one and this comment will serve as my starting bullet points.
1. https://docs.github.com/en/pages/setting-up-a-github-pages-s...
3. https://frontmatter.codes/docs/markdown
4. https://docs.github.com/en/pages/setting-up-a-github-pages-s...