hwm: Haskell Workspace Manager - Orchestrates Stack, Cabal, and HLS

[ development, library, mit, program ] [ Propose Tags ] [ Report a vulnerability ]
Versions [RSS] 0.0.1
Change log CHANGELOG.md
Dependencies aeson (>=1.4.4 && <3.0.0), ansi-terminal (>=0.11.3 && <=1.1.5), async (>=2.2.4 && <2.3.0), base (>=4.7.0 && <5.0.0), base16-bytestring (>=1.0.0 && <2.0.0), bytestring (>=0.10.4 && <=0.12.2.0), Cabal (>=3.8 && <=3.16.1.0), containers (>=0.4.2.1 && <=0.8), cryptohash-sha256 (>=0.11.100 && <=0.11.102.1), directory (>=1.0 && <=1.3.10.1), filepath (>=1.1.0 && <=1.5.5.0), Glob (>=0.7.0 && <1.0.0), hpack (>=0.36.0 && <=0.39.1), hwm (>=0.0.0 && <0.1.0), modern-uri (>=0.1.0.0 && <1.0.0), mtl (>=2.0.0 && <2.6.0), optparse-applicative (>=0.12.0 && <0.20.0), process (>=1.0.0 && <2.0.0), relude (>=0.3.0 && <2.0.0), req (>=3.0.0 && <=3.13.4), stm (>=2.4 && <2.6.0), text (>=1.2.3 && <3.0.0), time (>=1.9.2 && <2.0.0), transformers (>=0.5.6 && <0.7.0), typed-process (>=0.1.0 && <0.4.0), unordered-containers (>=0.2.8 && <0.3.0), yaml (>=0.8.32 && <1.0.0) [details]
License MIT
Copyright (c) 2026 Daviti Nalchevanidze
Author Daviti Nalchevanidze
Maintainer d.nalchevanidze@gmail.com
Uploaded by nalchevanidze at 2026-02-15T20:02:54Z
Category Development
Home page https://github.com/nalchevanidze/hwm#readme
Bug tracker https://github.com/nalchevanidze/hwm/issues
Source repo head: git clone https://github.com/nalchevanidze/hwm
Distributions
Executables hwm
Downloads 1 total (1 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2026-02-15 [all 1 reports]

Readme for hwm-0.0.1

[back to package description]

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.