Index

ascent is effect-native reactive UI for Scala 3. It renders straight to the DOM: no virtual DOM, no diffing. The UI is a pure tree built once; the engine surgically patches the exact node, attribute, or child-list behind each reactive boundary. The substrate is ZIO.

Docs pages are Specular DocSpecs: the same source asserts under zio-test and SSR-renders here.

Install (core + browser)

libraryDependencies ++= Seq(
  "rocks.earlyeffect" %%% "ascent-core" % "0.5.1",
  "rocks.earlyeffect" %%% "ascent-js"   % "0.5.1", // Scala.js mount engine
  "rocks.earlyeffect" %%% "ascent-css"  % "0.5.1", // optional typed CSS
)

Optional modules

libraryDependencies ++= Seq(
  "rocks.earlyeffect" %%% "ascent-conduit"       % "0.5.1", // Ctx[M] state bridge
  "rocks.earlyeffect" %%  "ascent-html"          % "0.5.1", // SSR
  "rocks.earlyeffect" %%  "ascent-datastar-http" % "0.5.1", // server datastar
  "rocks.earlyeffect" %%% "ascent-datastar-js"   % "0.5.1", // browser datastar
  "rocks.earlyeffect" %%  "ascent-preview"       % "0.5.1", // local static + SSE reload
  "rocks.earlyeffect" %%% "ascent-chekhov"       % "0.5.1" % Test, // typed Chekhov locators
)

Local preview plugin

addSbtPlugin("rocks.earlyeffect" % "sbt-ascent-preview" % "0.5.1")
// enablePlugins(AscentPreviewPlugin) on the module; then:
// sbt ~todoJS/ascentPreview   or   sbt ~docs/ascentPreview

Documentation

Continue with: