Skip to content
Static blogging engine
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Sheaf is a static (or baked) blogging engine. This means the output of the engine is a collection of static html that can be served rapidly by a web server like Apache running on hardware with modest resources. The primary tradeoff is that dynamic behaviors like comments aren't supported.


  • Publish, revise and delete markdown or HTML articles in the markup of your choice, as expressed by an HTML template you provide.
  • Organize published articles hierarchically by year and month.
  • Generate chronologically ordered archives for each month and year articles are published in.
  • Generate a root object (index.html) containing recent articles in reverse chronological order.
  • Generate a blog feed in the Atom Syndication Format.
  • Perform typographic transformations to markdown articles (e.g., curly quotes, long dashes and elipses).
  • Optionally watch an article draft and publish revisions live for proofreading articles as they will appear to your readers.


Switches                     Default  Desc
--------                     -------  ----
-p, --no-publish, --publish  false    Publish an article
-r, --no-revise, --revise    false    Revise an article
-d, --no-delete, --delete    false    Delete an article
-m, --month                           Month an article to revise was published in
-y, --year                            Year an article to revise was published in
-s, --slug                            Article slug, ex: my-article-title
-t, --title                           The article's title
-l, --link                            Title links externally link, ex: ""
-a, --article                         File containing an article written in markdown or HTML,
                                      ex: path/to/article.html or path/to/
                                      Markdown articles are styled typographically. For example,
                                      quotes and dashes in markdown input are, respectively,
                                      converted to curly and long versions in an opinionated
                                      way. HTML articles are considered raw and not similarly
-w, --no-watch, --watch      false    Optionally watch an input while revising.
-h, --help                            Display usage.

Sheaf expects its configuration to appear in a file called '.sheaf' in your home directory. Here's an example;

(def ^:dynamic *config* { :blog-title "A Decade Removed"
                          :blog-subtitle "As it was, so it shall be"
                          :base-url ""
                          :atom-filename "index.xml"
                          :feed-id ""
                          :author-name "Courier Botanical"
                          :author-uri ""
                          :sheaf-root "/path-to-datastore-home/sheaf"
                          :archive-dir "dir-to-store-article-metadata"
                          :template-file "template.html"
                          :input-article-selector [:article :> any-node]
                          :articles-selector [:section :article :body]
                          :article-selector [:article]
                          :index-articles-selector [:#articles]
                          :page-title-selector [:head :title]
                          :title-selector [:article :h2 :a]
                          :time-selector [:time]
                          :permalink-selector [:article :header :p :a]
                          :archives-selector [:section#archives]
                          :archive-list-selector [:.archive-list]
                          :doc-root "/path-to-output-htdocs"
                          :max-home-page-articles 20 })


Sheaf doesn't differentiate between drafts and final published articles. To avoid a confusing experience for your readers it is recommended that you publish to a non-public (or local) document root while an article is being revised.

Something went wrong with that request. Please try again.