@hackage hwm0.0.5

Haskell Workspace Manager - Orchestrates Stack, Cabal, and HLS

HWM: Haskell Workspace Manager

HWM is not a build tool. It is the missing link that orchestrates the tools you already use.

Haskell has excellent build systems (stack, cabal, nix) and a powerful IDE (hls), but they don't talk to each other in a monorepo. HWM bridges this gap by acting as a single source of truth, automatically generating and synchronizing the configuration files those tools expect.

The Problem

In a typical Haskell monorepo:

  • Dependency Drift: Different packages use different versions of the same dependency
  • Matrix Complexity: Testing multiple GHC versions requires maintaining separate config files
  • Broken IDEs: Adding modules breaks HLS until you manually update hie.yaml
  • Release Friction: Releasing requires manually bumping versions across dozens of files

The Solution

You define the "what" in hwm.yaml. HWM handles the "how."

name: my-project
version: 0.1.0

workspace:
  - name: libs
    prefix: my-app
    members: [core, api, client]

registry:
  - aeson >= 2.0 && < 3.0
  - text  >= 2.0 && < 3.0

matrix:
  default-environment: stable
  environments:
    - { name: stable, ghc: 9.6.3, resolver: lts-22.6 }
    - { name: nightly, ghc: 9.10.1, resolver: nightly-2024-05-22 }

One command regenerates everything:

hwm sync

HWM generates and keeps in sync:

  • stack.yaml / cabal.project
  • package.yaml files → .cabal files
  • hie.yaml for HLS
  • Build matrix configurations

Quick Start

# Install
stack install hwm
# or
cabal install hwm

# In an existing Stack project
hwm init
hwm sync
hwm run build

Key Commands

  • hwm status - Check if generated files are in sync
  • hwm sync - Regenerate all configuration files
  • hwm run <script> - Run scripts across build matrix
  • hwm outdated - Check for dependency updates
  • hwm version <bump> - Atomically bump versions
  • hwm publish <group> - Publish to Hackage

Full Documentation

📚 Complete Documentation & Examples →

Visit the GitHub repository for:

  • Detailed configuration reference
  • Architecture documentation
  • Contributing guidelines
  • Examples and use cases

Origin

HWM was born out of necessity to manage the Morpheus GraphQL ecosystem with 15+ packages across multiple GHC versions.