The Hackage Database
HackageDB is a pool of releases of Haskell software, bundled as Cabal packages.
The package collection can be presented in various ways. So far we have a basic web interface to the Hackage database. It presents a simple listing of packages, and has forms for checking and uploading packages.
See also cabal upload, a command-line tool for uploading Cabal packages to HackageDB.
The source code is available via
However many enhancements do not require modifying this code, because the data can be accessed directly, and has a simple structure, as described below.
There is also a new version of Hackage under development based on happstack. The source code is available via
- darcs get http://code.haskell.org/hackage-server
Check out progress on Hackage 2.0 at HackageDB/2.0.
A package collection is a directory with a simple structure:
- logs of unsuccessful builds
- logs of successful builds
- latest (symbolic link)
where 00-index.tar.gz tars up all the pkg/version/pkg.cabal files, and an optional preferred-versions file listing constraints on recommended versions of the packages (say, "base < 4").
The collection may contain several versions of a particular package.
For example, see the package collection underlying the above interface.
Suggestion: replace the index with a concatenation of the .cabal files with some separator (say @), and having both gzipped and uncompressed versions.
The upload script runs a shell script post-upload-hook, so we can add as many indices as we want.
Similar systems for other languages
- Comprehensive TeX Archive Network
- Comprehensive Perl Archive Network
- the Caml Humps
- Ruby Application Archive (see RubyGems for a comparison)
- Python Package Index
- Comprehensive Erlang Archive Network
- Scheme Now!