{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreifmt4pffucprx7fqwpryii5hlqxiz67h24mj5anybtlqv5mqsdzae",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mhv4cr7k24d2"
  },
  "path": "/t/ihp-v1-5-has-been-released/13846#post_1",
  "publishedAt": "2026-03-25T11:26:50.000Z",
  "site": "https://discourse.haskell.org",
  "tags": [
    "wai-session-maybe",
    "wai-session-clientsession-deferred",
    "IHP v1.5.0 on GitHub",
    "UPGRADE.md",
    "@User",
    "@Item"
  ],
  "textContent": "We just released IHP v1.5, the largest release in IHP’s history. With 1,051 commits, it includes a complete database layer rewrite, major performance improvements, a new typed SQL package, and 15+ modules extracted into standalone Hackage packages.\n\nHere are the highlights:\n\n## Hasql Database Migration\n\nThe entire database access layer has been rewritten from `postgresql-simple` to `hasql`, delivering up to 2x lower query latency in production. Hasql uses prepared statements and binary protocol encoding. The\nquery builder API is unchanged — existing code like `query @User |> filterWhere (#active, True) |> fetch` works exactly as before.\n\n## Typed SQL (`ihp-typed-sql`)\n\nA new `typedSql` quasiquoter connects to your dev database at compile time to infer column types, detect nullable columns from LEFT JOINs, and validate parameters:\n\n\n    users <- [typedSql|\n        SELECT users.name, orders.total\n        FROM users\n        LEFT JOIN orders ON orders.user_id = users.id\n    |] -- inferred: TypedQuery (Text, Maybe Double)\n\n\n## Pipeline Queries\n\n`fetchPipelined` batches multiple independent queries into a single PostgreSQL round-trip:\n\n\n    (allItems, activeItems, count) <- pipeline do\n        allItems    <- query @Item |> fetchPipelined\n        activeItems <- query @Item |> filterWhere (#active, True) |> fetchPipelined\n        count       <- query @Item |> fetchCountPipelined\n        pure (allItems, activeItems, count)\n\n\n## Performance\n\nLots of performance work across the stack: 3x faster session middleware (published as standalone Hackage packages wai-session-maybe and wai-session-clientsession-deferred), 5x faster URL generation, 2x faster render pipeline, and GHCi dev server memory reduced from 4GB to 500MB.\n\nOther highlights: composite primary key support, customRoutes/customPathTo for clean URLs alongside AutoRoute, GHC 9.10 (with experimental 9.12 support), and 15+ modules extracted into standalone Hackage packages.\n\nFull release notes and changelog: IHP v1.5.0 on GitHub\nUpgrade guide: UPGRADE.md",
  "title": "IHP v1.5 has been released"
}