Create interactive HTML applications with type-safe serverside Haskell. Inspired by HTMX, Elm, and Phoenix LiveView
Learn more about Hyperbole on Hackage
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Main where
import Data.Text (Text)
import Web.Hyperbole
main = do
run 3000 $ do
liveApp (basicDocument "Example") (runPage simplePage)
page :: (Hyperbole :> es) => Eff es (Page '[Message])
page = do
pure $ col id $ do
hyper Message1 $ messageView "Hello"
hyper Message2 $ messageView "World!"
data Message = Message1 | Message2
deriving (Show, Read, ViewId)
instance HyperView Message es where
data Action Message = Louder Text
deriving (Show, Read, ViewAction)
update (Louder msg) = do
let new = msg <> "!"
pure $ messageView new
messageView :: Text -> View Message ()
messageView msg = do
row id $ do
button (Louder msg) id "Louder"
el_ $ text msg
Create a new application:
$ mkdir myapp
$ cd myapp
$ cabal init
Add hyperbole and text to your build-depends:
build-depends:
base
, hyperbole
, text
Paste the above example into Main.hs, and run
$ cabal run
Visit http://localhost:3000 to view the application
The example directory contains an app demonstrating various features. See it in action at https://docs.hyperbole.live
View Documentation on Hackage
View on Github
The NSO uses Hyperbole for the Level 2 Data creation tool for the DKIST telescope. It is completely open source. This production application contains complex interfaces, workers, databases, and more.
With nix installed, you can use nix develop
to get a shell with all dependencies installed.
Download and install NPM. On a mac, can be installed via homebrew:
brew install npm
Install client dependencies
cd client
npm install
Recommended: Use direnv
to automatically load environment from .env
brew install direnv
direnv allow
Build JavaScript client
cd client
npx webpack
Run examples
cd example
cabal run
cabal test
Run tests, then recompile everything on file change and restart examples
bin/dev