Probably the simplest static site generator in the world! (Yes, inspired from Carlsberg commercials š)
FOSSFolio is a Free and Open Source Software (FOSS) meant for developers to create their own static websites (mostly portfolios), with fine-grained control.
Developers or coding enthusiasts who need a static site (maybe like a blog) with minimal effort.
content/
folder, directly or indirectly. You just need to have a theme for it (or customize your theme accordingly).Console while building a demo site:
Post rendered with default theme using the default.html
mapping:
Post rendered with blogtastic theme using the default.html
mapping:
Example of an auto-generated sitemap:
The main objective of creating FOSSFolio was to avoid the different complexities imposed by other static site generator (like Hugo) that give you a lot of control, but have quite a learning curve. I really love Hugo, but sometimes it requires a lot of changes even to add/change some basic functionalities.
pip install --upgrade poetry
.poetry init
poetry install
fossfolio
folderassets
and posts
folderpython build.py
build
folder will contain the generated static site.There are two kinds of syntaxes for templating with FOSSFolio:
Plugins are the ad-hoc extensions in FOSSFolio. Plugin templates and their syntax are decided by the devs who write them - You have full control here!
I've given two default plugins for now:
The date_time
plugin: Inserts the current date-time wherever you insert <% current_time %>
in your markdown files (Inspired from EJS syntax š)
The user_metadata
plugin: Inserts your PC's hostname wherever you insert <% user %>
in your markdown files.
You can use Jinja templates too. The context passing mechanism is under development.
Keeping the intended audience in mind, the USP of FOSSFolio is the degree of customization it offers. You can hack about just anything - the templates, the plugins - heck even the build.py
is a small file that aggregates all the small modules into a default workflow - you can hack around that as well.
You can even integrate the modules and functionalities into other larger programs!
A plugin can consist of anything, as long as it satisfies the following criteria:
__init__.py
)main.py
file that acts like a controller for other functionalities of the plugin.run
method inside main.py
, that will act as the controller methodrun
method should return a dictionary containing the field content
which will contain the modified html code. (Be very careful at this step, since it may open your plugin to JS-based vulnerabilities. Any sanity checks are your responsibility - in exchange for maximum freedom with what you can do.)Some points you may want to keep in mind:
<%...%>
style is pretty familiar to most developers around the world (thanks to JSP, EJS, etc). So you may want to keep placeholders in that format for better readability.Since FOSSfolio is based on Python-markdown under the hood, you can use the additional features of Python-markdown, that don't exist in the vanilla Markdown specifications. Some of those features are:
and so on.
For more extensions, you can check out the Extensions Glossary to supercharge Markdown!