ssg is yet another static site generator

For a real world usage example see klingtnet/klingtnet.github.io.

Installation

If you've a Go distribution installed then just run:

$ go install github.com/klingtnet/static-site-generator/cmd/ssg@latest

Otherwise you can use one of the pre build binaries from the releases page.

Usage

First you need a configuration file, for all available options refer to example.config.json. Second, and most important, is content. The absolute minimum is a folder containing just an index.md. The folder structure of a more complex page is shown below:

content/
├── about-me.md
├── articles
│   ├── bye.md
│   └── hello.md
├── index.md
├── images
    └── photo.webp
└── notes
    └── index.md
    └── something-else.md
static/
└── assets
    └── base.css

For this example ssg will generate:

  • a navigation menu containing all root pages and first-level subdirectories with markdown files, i.e. [home,about,articles,notes]
  • a list page for the articles directory (since no index.md was present)
  • no list page for notes, instead index.md is assumed to be the list page
  • images is just copied
  • contents from static directory will copied as is
output/
├── about-me.html
├── articles
│   ├── bye.html
│   ├── hello.html
│   └── index.html
├── index.html
└── notes
    ├── index.html
    └── something-else.html
└── assets
    └── base.css

Anything besides the root index.md is optional.

Development

Thanks to Go's excellent profiling support it is very easy to generate a CPU and memory profile. The following commands shows how to do this for a benchmark:

$ go test -cpuprofile cpu.prof -memprofile mem.prof -bench=BenchmarkGenerator ./generator/

Generated profiles can then be analyzed using pprof, e.g. by running go tool pprof -http :9999 cpu.prof. Profiles should be analyzed for any performance optimization to verify if they bring a benefit or not.