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/ascentPreviewDocumentation
Continue with: