https://github.com/bradymholt/xertz
A static site generator written in TypeScript
https://github.com/bradymholt/xertz
markdown markdown-to-html static-site-generator typescript
Last synced: 3 months ago
JSON representation
A static site generator written in TypeScript
- Host: GitHub
- URL: https://github.com/bradymholt/xertz
- Owner: bradymholt
- License: mit
- Created: 2019-03-26T14:24:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-02-11T10:45:17.000Z (over 2 years ago)
- Last Synced: 2025-02-12T22:33:02.540Z (4 months ago)
- Topics: markdown, markdown-to-html, static-site-generator, typescript
- Language: TypeScript
- Size: 1.29 MB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# xertz 
> Pronounced ‘zerts’, it means to gulp something down quickly and/or in a greedy fashion
xertz is a static site generator with first-class support for Markdown and Handlebars templates
## Installation and Usage
xertz requires Node.js to be installed and is distributed on [npm](https://npmjs.com). It can easily be installed and executed by using the [npx](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b) tool, which is distributed with newer versions of Node.js.
### Commands
`npx xertz init [folder_name]` - Initializes a new xertz project
`npx xertz new [Post Title]` - Create a new folder in posts/.
`npx xertz serve` - Builds and serves a xertz project on http://localhost:8080. Also watches and rebuilds on any changes.
`npx xertz build` - Buids a xertz project and outputs to `_dist` folder.
## Features
- First class support for SaSS, Markdown and Handlebars templating
- Built in support for AMP
- Code Highligting via Prism.js## Directory Structure
When you initialize a xertz site, a directory will created that looks like this:
```
|-- my_site
|-- _layouts
|-- media
|-- posts
|-- styles
|-- _config.yml
|-- index.html.hbs
```- *_layouts* - This folder contains Handlebars layouts which will be used to contsruct rendered pages.
- *media* - This folder contains images and other assets and will be copied as is.
- *posts* - This folder contains the posts.
- *styles* - CSS files can be placed here and will be be made available in the template data.
- *_config.yml* - This is the base config file.
- *index.html.hbs* - This is the main index page for the site.### Config
Configuration comes from one of these places, in order of precedence:
- Root _config.yml
- _config.yml file in content directory or subdirectory
- Markdown file yaml Front Matter### Templates
A file with the `html.hbs` extension will be processed as a Handlebars template and have access to `pages` data which will be an array of all pages in the current and subdirectories.
### Markdown
- A file can have a date prefix in its name which will set the `date` variable.
- By default, the name of the file (minus any date prefix) will be used as the `slug` variable and effect the output path.#### Content Package Directory
If subdirectory of `posts/` contains contains a file called `index.md`, it will be deemed a Content Package Directory. This means all files within the directory will be processed as a unit and copied to a corresponding output directory.
For example, if you had a directory structure defined as:
```
|-- content
|-- 2019-03-13-crazy-pets
|-- index.md
|-- catz_lol.jpg
|-- doggy_do_little.jpg
```The `2019-03-13-crazy-pets/` folder is considered a Content Package Directory. It would be output as:
```
|-- crazy-pets
|-- index.html
|-- catz_lol.jpg
|-- doggy_do_little.jpg
```and accessible at https://youdomain.com/crazy-pets/
### Layouts
Any file with a `_` prefix is ignored.
### Styles
CSS and SaSS can be placed within any folder but when it is placed in the `styles/` folder you have access to the styles within templates. This is useful, for example, if you want to inline your styles within a template with `` rather than linking to a path with ``.
Any file with a `_` prefix is ignored.
## Handlebars Helpers
The following Handlebars helpers are made available in xertz:
- limit - `{{ limit pages 15 }}`
- filter - `{{ filter pages "type" "post" }}`
- iif - `{{ iif excerpt site_description }}`
- dateFormat - `{{ dateFormat "now" "yyyy" }}`
- indent - `{{{ indent my_text 4 }}}`
- group - `{{#group pages by="year"}}`
- encodeURI - `{{#encodeURI site_url}}`