Skip to main content

gwernnet.cabal

gwernnet.cabal is the central build configuration for all Haskell code in the gwern.net build system.

Pathbuild/gwernnet.cabal
LanguageCabal
Lines190
Sourcebuild/gwernnet.cabal
at 406d3e423

Read this when Use this page when tracing the Haskell build pipeline, generators, metadata code, or backend utility behavior around gwernnet.

Overview

gwernnet.cabal is the central build configuration for all Haskell code in the gwern.net build system. It defines:

  • A shared library (gwernnet) exposing 53 modules for site generation
  • 13 executable tools for build and maintenance tasks
  • Common dependencies and compiler options shared across all components

The configuration uses Cabal 3.0 features like common stanzas to reduce duplication and ensure consistent settings across all build targets.


Package Metadata

cabal-version: 3.0
name: gwernnet
version: 2026.6.1
license: CC0-1.0
author: Gwern Branwen
maintainer: Gwern Branwen
build-type: Simple
synopsis: Gwern.net build + maintenance tools (internal)
category: Web

The version follows a date-based scheme: YYYY.M.patch (e.g. 2026.6.1)


Library Modules

The library exposes 53 modules organized by function:

Core Build

ModulePurpose
AnnotationMain annotation/metadata system
LinkMetadataLink metadata processing
LinkMetadataTypesType definitions for metadata
TypographyPandoc typography transforms
UtilsCommon utilities

Annotation Scrapers

ModulePurpose
Annotation.ArxivarXiv paper metadata
Annotation.BiorxivbioRxiv/medRxiv metadata
Annotation.GwernnetInternal site metadata
Annotation.OpenReviewOpenReview paper metadata
Annotation.PDFPDF document metadata
ModulePurpose
LinkArchiveArchive.org integration
LinkBacklinkBacklink generation
LinkIDLink identification
LinkIconLink type icons
LinkLiveLive preview popups
LinkMetadataLink metadata processing

Text Processing

ModulePurpose
ParagraphParagraph transforms
ColumnsList column layout
InflationDollar inflation adjustment
Text.RegexVendored regex module
UtextUnicode-rich plain-text rendering

Metadata Handling

ModulePurpose
Metadata.AuthorAuthor name processing
Metadata.DateDate parsing/formatting
Metadata.FormatFormat detection
Metadata.TitleTitle processing

Configuration Modules

All Config.* modules contain constants, test cases, and whitelists:

  • Config.GenerateSimilar, Config.Inflation, Config.Interwiki
  • Config.LinkArchive, Config.LinkID, Config.LinkMetadata
  • Config.LinkIcon, Config.LinkLive, Config.LinkSuggester
  • Config.Metadata.Author, Config.Metadata.Format, Config.Metadata.Title
  • Config.Misc, Config.Paragraph, Config.Tags, Config.Typography, Config.Utext
  • Config.XOfTheDay

Other Modules

ModulePurpose
BlogBlog post generation
CycleCycle detection utilities
GenerateSimilarSimilar link recommendations
GTXGTX file handling
ImageImage processing
InterwikiInterwiki link expansion
QueryExtract links/URLs from Pandoc documents
TagsTag system
TestTest utilities
UniqueUnique ID generation
XOfTheDayDaily featured content

Executables

hakyll

Main site generator using Hakyll static site framework.

executable hakyll
import: exe-common
main-is: hakyll.hs
ghc-options: -threaded -rtsopts

preprocessMarkdown

Markdown preprocessing before Pandoc.

executable preprocessMarkdown
main-is: preprocessMarkdown.hs
build-depends: gwernnet

generateLinkBibliography

Creates bibliography pages from link metadata.

executable generateLinkBibliography
main-is: generateLinkBibliography.hs
ghc-options: -threaded -rtsopts

generateDirectory

Generates directory/index pages.

executable generateDirectory
main-is: generateDirectory.hs
ghc-options: -threaded -rtsopts

Creates backlink pages showing what links to each page.

executable generateBacklinks
main-is: generateBacklinks.hs
ghc-options: -threaded -rtsopts

checkMetadata

Validates metadata consistency.

executable checkMetadata
main-is: checkMetadata.hs

guessTag

Suggests tags for content.

executable guessTag
main-is: guessTag.hs

changeTag

Batch tag modification.

executable changeTag
main-is: changeTag.hs
ghc-options: -threaded -rtsopts

Creates "similar links" recommendations.

executable generateSimilarLinks
main-is: generateSimilarLinks.hs
ghc-options: -threaded -rtsopts

linkTitler

Adds title metadata to links.

executable linkTitler
main-is: linkTitler.hs
ghc-options: -threaded -rtsopts

redirectGuesser

Suggests nginx redirects for likely moved URLs.

executable redirectGuesser
main-is: redirectGuesser.hs
ghc-options: -threaded -rtsopts

linkSuggester

Generates link suggestions.

executable linkSuggester
main-is: linkSuggester.hs
ghc-options: -threaded -rtsopts

linkExtractor

Extracts links from Markdown.

executable linkExtractor
main-is: linkExtractor.hs
ghc-options: -threaded -rtsopts

Common Stanza

All components share dependencies and warning defaults via the gwern-common stanza:

common gwern-common
default-language: Haskell2010

ghc-options: -Wall

build-depends:
base, HTTP, aeson, array, async, ...

Executables import exe-common, which sets hs-source-dirs: app and depends on the gwernnet library. The library stanza sets hs-source-dirs: . and adds ghc-options: -O2.

Compiler Options

OptionPurpose
-O2Optimization level 2 for the library stanza
-WallEnable all warnings
-threadedEnable threading (some executables)
-rtsoptsEnable runtime options (some executables)

Key Dependencies

Core

PackagePurpose
pandoc==3.1.3Document conversion
pandoc-typesPandoc AST types
hakyll==4.16.2.0Static site generator

Web/Network

PackagePurpose
HTTPHTTP client
http-conduit==2.3.8Streaming HTTP
http-typesHTTP type definitions
network-uriURI parsing

Data/Text

PackagePurpose
aesonJSON parsing
textText type
bytestringBinary data
containersMaps, sets
vectorEfficient arrays

Regex

PackagePurpose
regex-baseRegex abstraction
regex-tdfaTDFA regex engine

Other

PackagePurpose
titlecaseTitle case conversion
tagsoupHTML parsing
edit-distanceString similarity
cryptohashHashing

Version Pins

Some dependencies have exact version pins to ensure reproducible builds:

hakyll==4.16.2.0
http-conduit==2.3.8
pandoc==3.1.3

Additionally, warp is bounded (warp<3.4.13) to work around a compilation failure in warp-3.4.13.


Building

cd build/
cabal build all # Build everything
cabal build hakyll # Build just hakyll
cabal run hakyll -- ... # Run with arguments

See Also