goose

command module
v0.0.0-...-92e47f5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2025 License: MIT Imports: 1 Imported by: 0

README

goose

goose is an opinionated static site generator written in Golang.

Installation

To get started, start by cloning the repository:

git clone https://github.com/radeeyate/goose.git
cd goose

Usage

The directory structure of a goose project is as follows:

source
├── pages
│   ├── blog
│   │   └── firstblog.md
│   ├── blog.md
│   ├── index.md
│   ├── contact
│   │   └── index.md
│   └── test.md
├── styles
│   └── default.css
└── templates
    └── default.html
  • All files are read from the source directory. This will be configurable in the future.
  • The default template is stored in the templates directory as default.html. In the future, this will be configured via a value in the Markdown file's front matter.
  • The default style is stored in the styles directory as default.css.
  • All pages are read from the pages directory.
    • index.md -> index.html
    • blog.md -> blog/index.html (unless blog/index.md already exists)
    • blog/firstblog.md -> blog/firstblog.html

To generate the static site, run the following command:

go run main.go

This will generate a static site in the build directory.

Features

  • Markdown support
  • Templating
    • Pass front matter to template
  • Metadata variable placeholders
  • CSS bundling
  • JS bundling
Markdown support
  • Relative links
  • Absolute links
  • Images
  • Code blocks
  • Headers
  • Lists
  • Bold
  • Italic
  • Strikethrough
  • Blockquotes
  • Horizontal rules
  • Github Flavored Markdown
  • Plain text -> URL Conversion
  • Footnotes
  • Definitions
  • Task Lists
  • Code Highlighting
  • Emojis 🚀
  • Superscript & Subscript
  • Text Highlighting
Templating

Anywhere the word markdown is found in the template, your Markdown will be inserted. In the future, you will be able to have a <markdown /> tag instead.

The template for a page is determined by the template variable in the front matter:

---
title: My Page
template: custom
---

In this example, the custom.html file in the templates directory will be used as the template. If no template is declared, default.html will be used.

The output of all Markdown conversion and Markdown conversion is minified, including CSS and Javascript.

CSS Bundling

The stylesheet for a declared page will be automatically inserted into the <head> of the HTML template. You can declare custom styles for a page using the front matter:

---
title: My Page
styles:
- default
- custom
---

In this example, the default.css and custom.css files will be bundled into the page. You can place these styles in the styles directory as mentioned earlier. default.css will be applied if a custom style is not declared.

JS Bundling

The script for a declared page will be automatically inserted into the <head> of the HTML template. You can declare custom scripts for a page using the front matter:

---
title: My Page
scripts:
- default
- custom
---

In this example, the default.js and custom.js files will be bundled into the page. You can place these styles in the scripts directory as mentioned earlier. default.js will be applied if a custom style is not declared.

Metadata

You can access variables in the front matter of a Markdown file using the {{ .meta.<variable_name> }} syntax. You can also access variables from other files using the {{ from <path> .meta.<variable_name> }} syntax.

For example, you could use {{ .meta.title }} to retrieve the document's title. You can use {{ from index .meta.title }} to retrieve the title of a file named index.md. This supports directory traversal, so you could do something like {{ from ../index .meta.title }} or {{ from blogs/firstblog .meta.tags }}

If a title variable is found in the front matter of a Markdown file, it is automatically inserted into the document's <head>.

License

goose is open-sourced under the MIT license.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL