|
| 1 | +[](https://github.com/sponsors/hyperpolymath) |
| 2 | + |
| 3 | +// SPDX-License-Identifier: MPL-2.0 |
| 4 | +// SPDX-FileCopyrightText: 2025-2026 Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk> |
| 5 | + |
| 6 | += casket-ssg |
| 7 | +image:https://img.shields.io/badge/OpenSSF-Best_Practices-green?logo=opensourcesecurity[OpenSSF Best Practices,link="https://www.bestpractices.dev/en/projects/new?repo_url=https://github.com/hyperpolymath/casket-ssg"] |
| 8 | +image:https://img.shields.io/badge/License-PMPL--1.0-blue.svg[License: PMPL-1.0,link="https://github.com/hyperpolymath/palimpsest-license"] |
| 9 | +image:https://api.thegreenwebfoundation.org/greencheckimage/github.com[Green Web,link="https://www.thegreenwebfoundation.org/green-web-check/?url=github.com"] |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | + |
| 14 | +image:https://img.shields.io/badge/Philosophy-Palimpsest-indigo.svg[Palimpsest,link="https://github.com/hyperpolymath/palimpsest-license"] |
| 15 | + |
| 16 | + |
| 17 | +:toc: auto |
| 18 | +:toclevels: 2 |
| 19 | + |
| 20 | +image:https://img.shields.io/badge/RSR-compliant-gold[RSR Compliant,link=https://github.com/hyperpolymath/rhodium-standard-repositories] |
| 21 | + |
| 22 | +**Pure functional static site generator in Haskell.** |
| 23 | + |
| 24 | +== Who Is This For? |
| 25 | + |
| 26 | +* **Haskell developers** who want to build sites with tools they know and love |
| 27 | +* **Functional programming enthusiasts** who appreciate compositional design |
| 28 | +* **Teams requiring reliability** where type safety prevents runtime surprises |
| 29 | +* **Anyone frustrated** by dynamic language site builders that fail at deploy time |
| 30 | + |
| 31 | +== Why casket-ssg? |
| 32 | + |
| 33 | +=== Type Safety That Matters |
| 34 | + |
| 35 | +Your site structure is checked at compile time. Missing templates, broken links, malformed frontmatter - all caught before deployment, not discovered by users. |
| 36 | + |
| 37 | +=== Composable Pipelines |
| 38 | + |
| 39 | +Content transformations compose like functions should. Chain markdown processing, templating, and asset handling with confidence that types align. |
| 40 | + |
| 41 | +=== Lazy Large-Site Builds |
| 42 | + |
| 43 | +Haskell's lazy evaluation means casket-ssg only processes what's needed. Incremental builds are natural, not bolted on. |
| 44 | + |
| 45 | +=== Pandoc Integration |
| 46 | + |
| 47 | +Best-in-class document conversion with full Pandoc support. Markdown, reStructuredText, Org-mode - your content, your format. |
| 48 | + |
| 49 | +== Quick Start |
| 50 | + |
| 51 | +[source,bash] |
| 52 | +---- |
| 53 | +# Install |
| 54 | +cabal update |
| 55 | +cabal install casket-ssg |
| 56 | + |
| 57 | +# Create a site |
| 58 | +casket-ssg init my-site |
| 59 | +cd my-site |
| 60 | + |
| 61 | +# Build |
| 62 | +casket-ssg build |
| 63 | + |
| 64 | +# Preview locally |
| 65 | +casket-ssg serve |
| 66 | +---- |
| 67 | + |
| 68 | +== Features |
| 69 | + |
| 70 | +* **Compile-time template validation** - broken templates don't build |
| 71 | +* **Strong frontmatter types** - YAML parsing with schema enforcement |
| 72 | +* **Asset pipeline** - CSS/JS processing with hash-based cache busting |
| 73 | +* **Incremental builds** - only rebuild what changed |
| 74 | +* **Live reload** - instant preview during development |
| 75 | +* **RSS/Atom feeds** - generated automatically from content |
| 76 | +* **Sitemap generation** - SEO-ready output |
| 77 | + |
| 78 | +== Requirements |
| 79 | + |
| 80 | +* GHC 9.0 or later |
| 81 | +* Cabal 3.0 or Stack 2.0 |
| 82 | + |
| 83 | +== Part of poly-ssg |
| 84 | + |
| 85 | +casket-ssg is part of the https://github.com/hyperpolymath/poly-ssg[poly-ssg] family of language-native static site generators, unified through https://github.com/hyperpolymath/poly-ssg-mcp[MCP integration]. |
| 86 | + |
| 87 | +== License |
| 88 | + |
| 89 | +MPL-2.0 |
0 commit comments