http-nu
The surprisingly performant
Nushell-scriptable!Datastar-ready
HTTP Server
that fits in your back pocket
Give it a try
$ brew install cablehead/tap/http-nu
$ cargo install --locked http-nu
$ eget cablehead/http-nu
$ nix-shell -p http-nu
Composable HTML DSL
$ r#'
use http-nu/html *

{|req|
  DIV (
    H1 {class: [bg-green shadow-glow]}
    "Hai from Nushell!"
  ) (
    UL {
      1..3 | each {|n|
        LI $"Item ($n)"
      }
    }
  )
}
'# | http-nu :3001 -
localhost:3001

Hai from Nushell!

  • Item 1
  • Item 2
  • Item 3
Built-in Datastar SDK

Adapted from data-star.dev's intro example. Client-side: data-signals tracks running state. On click, running=true disables the button via data-attr:disabled and data-class.

Server-side: from datastar-request extracts signals (like interval). generate streams values while maintaining state via its accumulator, building up the message character by character. Each iteration pipes through to dstar-patch-element for DOM updates.

Finally, append adds a to dstar-patch-signal to set running=false, re-enabling the button when done. to sse handles Content-Type and formats everything as server-sent events.

{|req ctx|
  let signals = from datastar-request $req
  let interval = $signals.interval? | default 100 | into int

  "Hello from Datastar 🚀"
  | split chars
  | generate {|c acc = ""|
    sleep ($interval * 1ms)
    let acc = $acc + $c
    {
      out: (
        DIV {id: "message"} $acc
      )
      next: $acc
    }
  }
  # instruct datastar to patch our new HTML into place
  | each { to dstar-patch-element }
  # re-enable the button by setting running back to false
  | append ({running: false} | to dstar-patch-signal)
  | to sse
}
/datastar-sse
$interval:
click the button already