Created: 2012-03-24 18:39
Updated: 2015-09-24 13:22
License: mit



Parse the Hackage upload log and write the latest version of each package into a JSON/JSONP file.

Up-to-date versions of both JSON and JSONP are repeatedly generated at http://www.typeful.net/~tbot/hackage/. The JSONP callback is hard-coded to hackagePackageVersionsCallback.


Haskell (aeson/syb)

import           Data.Maybe
import qualified Data.Map as Map
import           Network.URI
import           Network.HTTP
import           Data.Aeson.Generic

url :: String
url = "http://www.typeful.net/~tbot/hackage/latest-package-versions.json"

-- | Return latest version of a package.
-- >>> getVersion "hspec"
-- Just "0.9.2"
getVersion :: String -> IO (Maybe String)
getVersion name = do
  r <- simpleHTTP request >>= getResponseBody
  return (decode r >>= Map.lookup name)
    request = (mkRequest GET . fromJust . parseURI) url


JSONP allows a javascript client to relax the same origin policy and retrieve the above JSON by providing the callback function hackagePackageVersionsCallback.


<!DOCTYPE html>
<html lang="en">
    <meta charset="utf-8">
      The latest version of hspec is <span id="result">???</span>.
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script src="custom.js"></script>


$(document).ready(function() {

  /* fetch latest packages versions, the result will be passed to
   * hackagePackageVersionsCallback(..) */

function hackagePackageVersionsCallback(response) {

  /* output latest version of hspec */
  var version = $(response).attr("hspec");
Cookies help us deliver our services. By using our services, you agree to our use of cookies Learn more