datastar-hs: Haskell bindings for Datastar

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

Server-side SDK for building real-time hypermedia applications with Datastar. Stream HTML fragments, reactive signal updates, and scripts to the browser over server-sent events (SSE). Built on WAI so it works with Warp, Scotty, Servant, Yesod, and any other WAI-compatible framework.


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.0.1
Change log CHANGELOG.md
Dependencies aeson (>=2.0 && <3), base (>=4.14 && <5), bytestring (>=0.10 && <1), containers (>=0.6 && <1), datastar-hs, ghc-heap (>=9.0 && <10), http-media (>=0.8 && <1), http-types (>=0.12 && <1), servant-server (>=0.19 && <1), stm (>=2.4 && <3), tagged (>=0.8 && <1), text (>=1.2 && <3), time (>=1.9 && <2), uuid (>=1.3 && <2), wai (>=3.2 && <4), warp (>=3.2 && <4) [details]
License MIT
Author Carlo Hamalainen
Maintainer carlo@carlo-hamalainen.net
Category Web, Hypermedia
Home page https://github.com/starfederation/datastar-haskell
Bug tracker https://github.com/starfederation/datastar-haskell/issues
Source repo head: git clone https://github.com/starfederation/datastar-haskell.git
Uploaded by CarloHamalainen at 2026-03-04T07:58:46Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for datastar-hs-0.1.0.1

[back to package description]

Datastar Haskell SDK

Test

A Haskell implementation of the Datastar SDK for building real-time hypermedia applications with server-sent events (SSE).

Live examples: https://hamalainen.dev

License

This package is licensed for free under the MIT License.

Design

The SDK is built on WAI (Web Application Interface), Haskell's standard interface for HTTP servers. This means it works with any WAI-compatible server (Warp, etc.) and any framework built on WAI (Yesod, Scotty, Servant, etc.) without framework-specific adapters.

Key design decisions:

API Overview

import Hypermedia.Datastar

-- Create an SSE response
sseResponse :: DatastarLogger -> (ServerSentEventGenerator -> IO ()) -> Response

-- Send events
sendPatchElements  :: ServerSentEventGenerator -> PatchElements  -> IO ()
sendPatchSignals   :: ServerSentEventGenerator -> PatchSignals   -> IO ()
sendExecuteScript  :: ServerSentEventGenerator -> ExecuteScript  -> IO ()

-- Read signals from a request (query string for GET, body for POST)
readSignals :: FromJSON a => Request -> IO (Either String a)

Quick Start

Add datastar-hs to your build-depends, then:

import Hypermedia.Datastar
import Network.Wai
import Network.Wai.Handler.Warp qualified as Warp

app :: Application
app req respond =
  case (requestMethod req, pathInfo req) of
    ("GET", ["hello"]) -> do
      Right signals <- readSignals req
      respond $ sseResponse nullLogger $ \gen -> do
        sendPatchElements gen (patchElements "<div id=\"message\">Hello!</div>")
    _ ->
      respond $ responseLBS status404 [] "Not found"

main :: IO ()
main = Warp.run 3000 app