[Haskell-cafe] ANN: yst 0.2.1

John MacFarlane jgm at berkeley.edu
Sun Aug 2 21:05:00 EDT 2009

I'm pleased to announce the release of yst, now available on HackageDB.
yst generates static websites from YAML or CSV data files and
StringTemplates. This approach combines the speed, security, and ease of
deployment of a static website with the flexibility and maintainability
of a dynamic site that separates presentation and data.

The easiest way to get a feel for yst is to try it:

cabal update
cabal install yst
yst create testsite
cd testsite

yst attempts to fill a niche between two kinds of site creation tools.
On the one hand you have simple static site generators like webgen,
webby, nanoc, and my old custom system using make and pandoc. On the
other hand, you have dynamic web frameworks like rails and django.
For my own smallish websites, I found that the dynamic frameworks were
overkill. Nobody but me was going to edit the pages, and I didn't
want the trouble of writing and deploying a dynamic site, setting up
a web server, and administering a database. A static site would be
faster, easier to deploy, and more secure. But the dynamic frameworks
offered one thing that the static site generators did not: an easy way
to separate data from presentation. This was becoming increasingly
important to me as I found myself constantly updating the same
information (say, publication data for a paper) in multiple places (say,
a LaTeX CV and a differently formatted web listing of papers).

What I wanted was a site generation tool that used YAML text files
as a database and allowed different kinds of documents to be produced
from the same data.  I couldn't find anything that did just what I
wanted, so I wrote yst. By way of illustration, here are the build
instructions for HTML and LaTeX versions of a CV, plus a web page with a
list of papers:

- url: cv.html
  title: CV
  template: cv.st
  data_common:  &cvdata
    contact: from contact.yaml
    jobsbyemployer: from jobs.yaml order by start group by employer
    degrees: from degrees.yaml order by year desc
    awards: from awards.yaml order by year desc group by title
    papers: from papers.yaml order by year desc where (not (type = 'review'))
    reviews: from papers.yaml order by year desc where type = 'review'
    talks: from talks.yaml where date < '2009-09-01' order by date desc group by title
    dissertations: from dissertations.yaml order by role then year group by role
    theses: from theses.yaml order by year then student
    courses: from courses.yaml order by number group by title
    <<:  *cvdata
    html: yes

- url: cv.tex
  title: CV
  inmenu: no
  template: cv.st
  layout: layout.tex.st
    <<:  *cvdata
    html: yes

- url: papers.html
  title: Papers
  template: papers.st
    papersbyyear:  from papers.yaml order by year desc then title group by year

yst's query language is limited, and there are lots of things you can
do with a full-fledged database that you can't do with yst. But yst
is ideal, I think, for small to medium data-driven sites that are
maintained by a single person who likes working with plain text. It
scratched my itch, anyway, and I release it in case anyone else has the
same itch.

Code, documentation, and bug reports:  http://github.com/jgm/yst/tree/master


More information about the Haskell-Cafe mailing list