Drow

NOTE: DROW IS CURRENTLY IN AN ALPHA STATE, AND SHOULD NOT BE TRUSTED.

Drow is a work-in-progress static site generator designed for extreme ease of use. It has few features. It is not configurable. It has an excellent CLI and documentation, and a developer who cares. ❤️

Table of Contents

Design Goals

1. Provide a simple a mapping from source to site as possible.

It should be easy to predict what your final site will look like just by looking at the source of your repository.

2. Be easy to fork and modify for your own purposes.

Drow is minimal, and that means that it may not do exactly the things you want it to do. In that case, it should be easy to fork the Drow repo, modify it to do what you want, and install it.

3. Include only the core features people actually use.

Some static site generators are packed with features. This can be really great, but if you're like me you know what you want your site to do, and don't like dealing with the complexity added by additional features. Drow isn't packed with features, but that helps make it extremely easy to use!

4. Include only the bare minimum configuration options.

By the same token, more configurability means more chances to be confused or for something to go wrong. Drow is not configurable, which means it's not hard to predict how things will behave!

5. Be easy to deploy.

Who wants to worry about deploying? Drow is designed to work solely with GitHub Pages, and in fact only supports the project pages set up, with the site deployed from the docs/ folder. This means that Drow actually doesn't even have a command to handle deploys! Just drow build your site, then git push to deploy!

6. Be fun to write posts in.

I wrote Drow to manage my own blog, and I wanted something that would be fun to write in. That's why drow admin exists. Writing posts in the command line is annoying, and there's no reason to have to do it! Instead, with Drow, you can write them in a nifty local admin panel and have everything work exactly as you'd expect!

Structure

Every Drow site starts with a drow setup. This copies the base Drow project template, which looks like this:

|- Drow.toml |- assets/ |- pages/ |- posts/ |- templates/

Drow.toml is where you put any configuration you want your pages, posts, or templates to be able to use.

assets/ just has its contents copied into the root of the site during building; so assets/css/ becomes just css/.

pages/ is where all the standalone pages for your site go. They must be markdown files (.md extension), and they're transformed like so: <title>.md becomes <title>/index.html in the site.

posts/ is where all the posts for your site go. They must be markdown files too, and they must be named <yyyy>-<mm>-<dd>-<title>.md. They get transformed like so: <yyyy>-<mm>-<dd>-<title>.md becomes blog/<yyyy>/<mm>/<dd>/<title>/index.html.

templates/ is where all the templates for your site go. Templates can load other templates, and every page or post must list what template it uses in a TOML frontmatter.

Drow additionally creates an atom.xml file, containing an ATOM feed of all posts.

Commands

drow setup [<DIRECTORY>]

This creates a new Drow site in the given directory, or in the current directory if no directory is given.

drow page <TITLE>

This creates a new page with the given title.

drow post <TITLE>

This creates a new post with the given title combined with the full current date.

drow build

Builds the site once, putting the results into the docs/ folder for easy deploys with GitHub Pages.

drow admin

Starts two local servers:

This admin panel allows you to add, delete, or edit every file in your Drow, and to deploy updates to GitHub Pages. In essence, it is a web panel for your static site!

Note that neither of these local servers has any sort of authentication on them, and that the admin panel allows complete editing of your Drow site.

NEVER RUN THESE SERVERS IN A PUBLICLY-ACCESSIBLE LOCATION.

Contributing

To learn how to contribute, see CONTRIBUTING.md.

License

Drow is MIT licensed. You can see the full license text in LICENSE.md.