# Install haskell-language-server with Homebrew, apk, MacPorts, Nix, pacman, scoop

Integration point for ghcide and haskell-ide-engine. One IDE to rule them all. Version 2.14.0.0 via Homebrew; verified from local package data. Also installable with nix: nix profile install nixpkgs#haskell-language-server.

## Install

```sh
sudo av install brew:haskell-language-server
```

Additional install commands:

### macOS

- Homebrew (100%):

```sh
brew install haskell-language-server
```

  Evidence: local Homebrew formula metadata

- MacPorts (94%):

```sh
sudo port install haskell-language-server
```

  Evidence: MacPorts ports tree: devel/haskell-language-server/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1

### Linux

- apk (92%):

```sh
sudo apk add haskell-language-server
```

  Evidence: Alpine Linux edge package indexes: haskell-language-server from https://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz

- Nix (92%):

```sh
nix profile install nixpkgs#haskell-language-server
```

  Evidence: nixpkgs package indexes: haskell-language-server from https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/top-level/all-packages.nix

- pacman (92%):

```sh
sudo pacman -S haskell-language-server
```

  Evidence: Arch Linux sync databases: haskell-language-server from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz

### Windows

- Scoop (92%):

```sh
scoop install main/haskell-language-server
```

  Evidence: Scoop official bucket manifest trees: bucket/haskell-language-server.json from https://api.github.com/repos/ScoopInstaller/Main/git/trees/master?recursive=1

## Package facts

- **Package key:** brew:haskell-language-server
- **Package manager:** Homebrew
- **Version:** 2.14.0.0
- **Source summary:** Integration point for ghcide and haskell-ide-engine. One IDE to rule them all
- **Homepage:** <https://github.com/haskell/haskell-language-server>
- **Repository:** <https://github.com/haskell/haskell-language-server>
- **Generated:** 2026-08-03T19:37:03+00:00

## Executables

- ghcide-bench-9.12 (alias)
- ghcide-bench-9.12.3 (alias)
- ghcide-bench-9.14 (alias)
- ghcide-bench-9.14.1 (alias)
- haskell-language-server-9.12 (alias)
- haskell-language-server-9.12.3 (alias)
- haskell-language-server-9.14 (alias)
- haskell-language-server-9.14.1 (alias)
- haskell-language-server-wrapper (alias)

## Install behavior

- Bottle: not available

## Freshness

- Page generated: 2026-08-03
- Package-manager version: 2.14.0.0
## Project history and usage

Haskell Language Server is the official Language Server Protocol implementation for Haskell. Its package-manager identity matters because it turns a historically difficult editor-integration story into a single installable tool that editors can discover through the standard LSP model.

The project grew out of the Haskell IDE ecosystem around ghcide, hie-bios, plugins, and the earlier haskell-ide-engine effort. The Homebrew formula description preserves that consolidation story directly: HLS became the integration point for ghcide and haskell-ide-engine rather than another standalone editor-specific tool.

### Project history

The documentation describes HLS as a language server that speaks LSP to editor clients, which lets editors reuse a common protocol for diagnostics, completions, hover information, definition lookup, references, formatting, and related IDE functions. That positioned HLS as infrastructure rather than a single editor extension.

A central technical lineage is ghcide. The HLS component documentation describes ghcide as a library for Haskell IDE tooling, paired with hie-bios for discovering project structure, dependencies, extensions, and build information. HLS packages that foundation with plugins and release engineering so users do not have to assemble the stack manually.

The 1.0.0 changelog framed the release as a celebratory stabilization point, with internal changes, bug fixes, performance work, GHC 8.10.4 support, HIE DB integration for references and symbols, and plugins for import disambiguation, shadowed imports, evaluation, formatting, and tactics. Later changelog entries show the project repeatedly tracking new GHC families and pruning old compiler support.

### Adoption history

HLS adoption follows the spread of LSP-capable Haskell editing in VS Code, Emacs, Vim/Neovim, and other clients. Its docs emphasize that editor configuration is client-specific while the server side remains the same executable family, which is exactly the distribution shape package managers like Homebrew, Nix, Arch, MacPorts, and Scoop are good at providing.

The package appears on Hackage with a long version series and a broad dependency set around ghcide, hls-plugin-api, hie-bios, hiedb, LSP libraries, formatters, and refactoring tools. That public package record is evidence that HLS became a normal Haskell package ecosystem artifact, not only a GitHub binary release.

Binary distribution is unusually important for HLS because GHC version compatibility is central to user experience. The installation docs instruct users to install the wrapper and the server executables for the GHC versions they work with; Homebrew exposes that shape through versioned executables such as haskell-language-server-wrapper and per-GHC server names.

### How it is used

Typical use is indirect: an editor or LSP client launches haskell-language-server-wrapper in a Haskell project, and the wrapper selects an HLS binary compatible with the project compiler. Users then get type diagnostics, completions, hover, code actions, references, formatting integration, Cabal-file assistance, and other plugin-provided features.

Project discovery often depends on hie.yaml, Cabal, Stack, or implicit hie-bios rules. That makes HLS especially sensitive to how a project is built, which is why package users care about the wrapper, the supported-GHC matrix, and the documentation around troubleshooting build cradles.

### Why package nerds care

For package nerds, HLS is a stress test of language-tool distribution. It must line up GHC ABIs, plugin versions, Hackage dependencies, native binaries, editor expectations, and project build tools. A package-manager upgrade can materially change editor behavior because it changes the compiler matrix and plugin set.

It also represents a broader packaging pattern: move editor intelligence into a protocol-speaking server, then let editors and operating-system package managers share that server. In Haskell, where compiler versions and build plans are especially specific, that pattern is more demanding than simply shipping one static CLI.

### Timeline

- 2020: Public Hackage candidate versions for haskell-language-server appeared, including 0.1.0.0.
- 2021: The 1.0.0 changelog marked a stabilization point with HIE DB integration, plugin work, and GHC 8.10.4 support.
- 2023: The 2.x line continued the ghcide/plugin architecture while tracking newer GHC releases.
- 2026: The 2.14.0.0 package record and changelog show bindists for multiple GHC versions, including GHC 9.14.1 and 9.12.x.

### Related projects

- ghcide supplies core IDE services and is documented by HLS as a library for Haskell IDE tooling.
- hie-bios discovers project layout and build settings for Haskell tools.
- haskell-ide-engine is part of the predecessor ecosystem that HLS consolidated.
- GHC, Cabal, Stack, Hackage, HIE DB, HLint, Ormolu, Fourmolu, and editor LSP clients form the surrounding toolchain.

### Sources

- <https://formulae.brew.sh/formula/haskell-language-server>
- <https://github.com/haskell/haskell-language-server>
- <https://hackage.haskell.org/package/haskell-language-server>
- <https://haskell-language-server.readthedocs.io/en/stable/components/ghcide.html>
- <https://haskell-language-server.readthedocs.io/en/stable/installation.html>
- <https://haskell-language-server.readthedocs.io/en/stable/what-is-hls.html>
- <https://raw.githubusercontent.com/haskell/haskell-language-server/master/ChangeLog.md>


## Security Notes

broad file, network, media, or database tool signal.

- **Geiger risk:** blue / medium
- broad file, network, media, or database tool signal


## Configuration and credential file locations

These source-backed paths show where this package keeps local settings or durable credentials. Automic Vault can use them as review targets for secret scanning, migration, and command approval.


## Configuration files

- Unix: <project-root>/hie.yaml
## Other Package-Manager Records

- Nix - haskell-language-server: normalized package name match | nixpkgs package indexes: haskell-language-server from https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/top-level/all-packages.nix
- apk - haskell-language-server - 2.9.0.0-r0: normalized package name match | Alpine Linux edge package indexes: haskell-language-server from https://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz | Official Haskell Language Server implementation | https://github.com/haskell/haskell-language-server
- pacman - haskell-language-server - 2.3.0.0-99: normalized package name match | Arch Linux sync databases: haskell-language-server from https://geo.mirror.pkgbuild.com/extra/os/x86_64/extra.db.tar.gz | LSP server for GHC | https://github.com/haskell/haskell-language-server#readme
- MacPorts - haskell-language-server: normalized package name match | MacPorts ports tree: devel/haskell-language-server/Portfile from https://api.github.com/repos/macports/macports-ports/git/trees/master?recursive=1
- Scoop - main/haskell-language-server: normalized package name match | Scoop official bucket manifest trees: bucket/haskell-language-server.json from https://api.github.com/repos/ScoopInstaller/Main/git/trees/master?recursive=1


## Combined YAML source

View the package source record on GitHub. [combined/haskell-language-server.yml](https://github.com/mxcl/pkgdb/blob/main/combined/haskell-language-server.yml)


## Sources

- pkg.so package database
- Geiger risk classifier
- curated configuration and credential file locations
- curated package history
- pkgdb category and tag curation
- external package-manager database matches
- cross-ecosystem install command graph
