wellington

Wellington is a lightweight static blog generator written in Rust. You can see it in action at https://emanuelgeromin.com/blog/

Wellington allows you to write blog posts in markdown and then automatically

From the root directory of your website, create a new blog:

bash mkdir my-amazing-blog cd my-amazing-blog wellington init --title "My Blog" \ --home_url "https://mysite.com \ --desc "My blog about clogs" \ --author "It's Me"

Then write a blog post:

bash mkdir post-1 touch post-1/index.md # edit this file wellington sync

This last command, wellington sync, automatically

Installation

Installation is via cargo:

bash cargo install wellington

Markdown with Footnotes/Sidenotes

Wellington supports an extended markdown syntax. In addition to the usual markdown, you can also mark footnotes/sidenotes directly in the HTML using curly braces:

```markdown

Here is an article

Here is some text with sidenotes/footnotes{this text will render as a footnote/sidenote}

```

Sidenotes are like footnotes except that they display to the right of the article instead of the bottom. See this blogpost as an example. To work, they require proper CSS. See the 'CSS' section below.

Why Wellington

There are plenty of blogging engines out there, many designed for use with static hosting services like GitHub pages. One great example is Jekyll.

I wrote wellington because I wanted support for sidenotes and require only a very simple set of features.

Relative links

Relative links in the post markdown files are automatically changed to point to the directory they're in. So for example, if my-amazing-blog/post-1/index.md contains the following:

markdown ![an image](image.png)

Then this is rendered as:

html <img src="my-amazing-blog/post-1/image.png" />

This makes embedding images in the blog post easier.

CSS

Wellington's sidenotes were designed for use with tufte-css. I use a modified version on my blog. This modified version is more mobile friendly and on narrow screens, instead of displaying sidenotes, displays footnotes. You're very welcome to copy my CSS. Alternatively, as a more minimal solution, you can just hide the sidenotes if you don't require them and render only the footnotes:

css .sidenote { display: none; }

To display the blog posts in a mobile friendly way, by using sidenotes for desktop and footnotes for mobile, as I've done, please check the modified version of tufte-css.

Templates

To render the posts and the table of contents, wellington uses Handlebars, a templating engine. This allows for customisability of the posts and of the table of contents. There are default templates in the source code in the templates directory. These are used by default and do not require installation. To override them, provide your own templates in your blog home directory:

Take a look at the default templates and adapt them to suit your needs!

MathJax (Latex) support

Using mathjax (latex) in the blog posts requires a hack. To prevent the latex to be rendered by the markdown parser, it has to be marked as code in markdown, for example

```markdown

a markdown file

Here is some text with an equation: \(E = mc^2\)

```

By default, mathjax does not render anything wrapped in <pre> or <code> tags. To override this behaviour, in addition to the <script> tag linking to the mathjax CDN, you will have to add the following to your template <head> section:

```html

```

This overrides the default skipTags, allowing also latex in <pre> and <code> tags to be rendered.

If you require both rendered latex and latex code in your blog posts, then unfortunately at the moment you're out of luck. A more long term solution would be to parse latex properly in the markdown document. However, this is a more long term project as it requires modifying pulldown-cmark, the library I use for rendering markdown. Contributions are welcome!

Known Bugs

Roadmap

There is still much to do. The current codebase grew organically without much advance planning. This shows: the codebase is quite messy and in need of a refactor!

Feature wise, soon I hope to support