Good evening!
It's Friday night in Germany! The perfect time to let other people have a few cocktails and get out of the house- try some new software!
Fresh off the press, my first Claude Code "supervised vibecoding" project (because AI means you need to keep your good taste...). Drumroll for...
blg, your new blog generator.
blg takes a bunch of markdown files and creates you a decent looking static blog with no configuration.
$ nimble install blg
$ mkdir md
$ echo "2026-01-01
# My post
some text
this gets cut off with a read more link" > md/mypost.md
$ blg
$ ls public
index.html
mypost.html
You can have tags using symlinks, your own menu with a small file with one tag or post per row, and any post in the menu is considered a page and does not appear in the blog.
There's also some more optional configuration like no .html extension (prettier URLs), site title and slogan, and of course you can make your own theme with either just CSS, or Nim.
Since your blog or site is static, you can host it anywhere- i like my server, but you can also use a S3 bucket or github or some kind of shared hosting, anything works.
I hope this makes creating a web site easy and fun! I'm sure there are lots of people who can't wait to know what you are thinking- and since you're staying home at your computer, having a blog is a great way to do that. Enjoy!
This is usable but quite new, tested on linux- error reports very welcome I'll fix them.
Symlinks as tags
That's good. I used to have my music collection with symlinks to dirs with tag name. A complete and simple database. Editing of tags in a file was a matter of removing and adding symlinks to the proper dir. It also wrote the tags to the music file.
I enjoy using nimib, what does that bring over it? Your library handles a simpler .md file instead of a Nim format apparently.
Writing in Nimib is more complex than a simple md file but it is so powerful:
Was your intent to have something simpler, more blog-oriented? How do you generate the HTML, do you rely on pandoc?
I like the blog-oriented aspect of it, I wish something based on Nimib, more blog-oriented than book-oriented would be created. I wish a graphical interface based on Nimib could be created with options to easily change the render (markdown, latex) for text cells or the Nim version for code cells. I hope also for an auto-generation of macros based on graphical changes to the AST tree, Imagine moving nodes with your mouse and see the macro appear - eventually guided by a text description for the generalization of your operation to other trees.
Do not hesitate to write a step-by-step tutorial to hosting. It took me quite a lot of time to understand Github pages hosting system and I had never heard of S3 bucket hosting. A simple tool like yours could be beneficial for beginners. Creating websites without (costly) no-code tools is hard for non-tech people!
Oh, that was interesting to look into! I was unfamiliar with nimib but it looks like a great project.
I wouldn't have used it myself, there is way too much visual noise for when I'm writing creatively, all those named blocks would surely slow me down. It has the feel of an easier latex, or maybe adobe illustrator. My role model for blg was more like a plain text version of something like writefreely. Simple, distraction free, extremely low friction. Start a blog in five minutes on a whim. Start twenty, see if one sticks with you.
A technical difference is that blg is a nim program, but it doesn't use the compiler (unless you do advanced templating). So it doesn't have a nim runtime dependency, which makes it faster and easier to distribute.
So the difference is indeed what you say, I simply put more importance on it than you do for creative flow.
If you have a look at the roadmap, things become even more different- I intend to have a full web frontend as well, which edits the markdown from the wysiwig changes, so you can have technical folks editing files and people who prefer a web gui collaborating in the same system.
It's how built Nim's website before people pushed for the Ruby-based crap that's used now. It's how I built my blog. It's how I built Nimony's website.
I've only found Nim tools based around nim md2html
FWIW, https://rust-lang.github.io/mdBook/ has nim syntax highlighting.
Yeah nim md2html and rst2html are really impressive and a big part of the inspiration for blg, which you could look at as a more general purpose version.
Perks of being a Nim user, you're constantly exposed to incredibly powerful, elegant tools, and you pick up by osmosis.
The same using java helps you pick up being a corporate minion :-)
Woah the Nim web site is in Ruby? That's weird- that's like if Porsche picked up a bunch of Citroen Berlingos as the company fleet. Because you can fit like 6 child seats in them!
Well- I just vibeconverted my last sinatra site to Nim because passenger kept crashing on me taking my entire proxy down with it and making real trouble for all my friends I'm hosting. Pain to maintain too. I ain't touching that shit no more. It took like an hour. So there's that.
Oh that's a super interesting question!
I took the opposite approach with blg, every template is a full html file but you have big helpers to offset the boilerplate.
How you all build websites with no template extension?
As I said, have an edited nimdoc.cfg in your project. (The compiler always tells you what config files it did pick up.)
For prior Nim work, also see Fabio Cevasco's hastysite and hastyscribe. Pretty cool things and two of the oldest more or less active Nim projects.
https://hastysite.h3rald.com/ https://github.com/h3rald/hastyscribe
How you all build websites with no template extension?
Guess what. Write plain html. It's not that complex and formatting is a meditative action.
Yeah I'm familiar! Great stuff.
blg is there even though nimib, nim md2html and hasty exist, to do a bit less but more easily.
I'd be interested to hear why it was done.
"Well get more custom articles for the website and more contributors" was the argument. Also to be fair back then the world was shifting to Markdown and Nim only supported RST.