Skip to content

soulsam480/pream

Repository files navigation

pream

Package Version Hex Docs License

Type-safe Gleam bindings for Preact with @preact/signals integration. Ships ergonomic HTML constructors, fine-grained reactivity, and Result/Option-aware rendering — no React-style hooks required.

Install

gleam add pream

Requires Preact and @preact/signals as npm dependencies:

npm install preact @preact/signals

Quick start

import pream
import signal
import vnode

pub fn main() {
  let count = signal.new(0)

  let app =
    vnode.div()
    |> vnode.children([
      vnode.text("Clicked "),
      vnode.reactive_text(signal.map(count, fn(n) { "clicked " <> n })),
      vnode.text(" times"),
      vnode.button()
      |> vnode.on("click", fn(_) { signal.set(count, signal.value(count) + 1) })
      |> vnode.child(vnode.text("Increment")),
    ])

  pream.to_preact(app)
}

Features

  • Shorthand constructorsvnode.div(), vnode.span(), vnode.button(), etc.
  • Pipe-friendly modifiersprop, on, class, id, disabled, ...
  • Fine-grained signalssignal.new, signal.computed, signal.effect (from @preact/signals)
  • Component hooksuse_signal, use_signal_effect, use_computed
  • Conditional helpersvnode.when, vnode.unless, vnode.when_some, vnode.when_signal, vnode.map_signal
  • Result/Option-awarepream.unwrap and pream.unwrap_option silently degrade into empty nodes on Error/None

Documentation

License

MIT © 2026 soulsam480

About

Signals first Gleam bindings to Preact and Preact signals

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors