A minimalist static blog generator.
- Super simple
- Write pages in Markdown
- Generates valid RSS 2.0 feed
- Supports code highlighting (using Chroma)
echo 'Some `cool` _arbitrary_ **Markdown**!' | pt
Which prints:
<!DOCTYPE html>
<html lang="">
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<p>Some <code>cool</code> <em>arbitrary</em> <strong>Markdown</strong>!</p>
</body>
</html>
go install github.com/hoffa/pt@latest
Or check releases for the latest binaries.
Usage of pt:
-base-url string
base URL
-dir string
where to save generated files (default ".")
-feed string
feed target path (default "feed.xml")
-feed-template string
feed template path
-highlight string
code highlight style
-template string
page template path
Pass the list of Markdown files to convert at the end.
Each page can contain a YAML front matter. It must be placed at the top within ---
delimiters:
---
title: Hello, world!
date: 2019-02-11
---
This is an example page!
Valid variables are:
title
: page titledate
: page creation dateexclude
: ifyes
, the page will be excluded from.Pages
and the RSS feed
.Title
: page title.Date
: page creation date.Path
: path to the generated HTML file.Content
: content of the generated HTML file.URL
: URL of the generated HTML file prefixed by the value of-base-url
.Exclude
: boolean specifying whether this page is in.Pages
.Pages
: array of all non-exclude
d pages sorted bydate
See templates/page.html
and templates/feed.xml
for the default templates.
Create a page template as template.html
:
<!DOCTYPE html>
<html>
<head>
<title>{{ .Title }}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
{{ if eq .Path "index.html" }}
{{ .Content }}
<ul>
{{ range .Pages }}
<li><a href="{{ .URL }}">{{ .Title }}</a> ({{ .Date.Format "January 2, 2006" }})</li>
{{ end }}
</ul>
{{ else }}
{{ .Content }}
{{ end }}
</body>
</html>
Create the index page as index.md
:
---
title: Jane Doe
exclude: yes
---
Subscribe via [RSS](/feed.xml).
And a post within a file called my-first-post.md
:
---
title: My first post
date: 2019-04-20
---
This is an example **Markdown** _post_.
I like `turtles`.
```python
print("Hello!")
```
Finally, build:
pt -base-url https://mysite.com -template template.html -highlight monokailight *.md
See the Chroma Playground for available syntax highlighting styles.