Early Effect

Act I

the board

Early Effect

Scala 3 craft, from the first effect.

I write libraries that make the honest path the one that compiles. Docs that are programs. SQL the compiler can see. HTTP as an effect, for humans, systems, and agents. CI the build already knows. UI with the same ZIO you use everywhere else.

Act II

Four rules on the board

Craft is what still holds after the clever bit has worn off.

01

Docs that cannot rot

A page is a program. Examples assert under zio-test. A red snippet fails CI instead of lying to the next reader.

specularmarklit

02

The domain lives in the types

If the database cannot RETURNING, the call does not compile. States and events are enums. A BoundOp is the capability; HTTP and MCP are hosts.

saferismechanoidheddle

03

The build is the source of truth

YAML does not get a vote. The module graph describes CI. Jar names stay cache-stable between tags. JS splices without Node.

zipxsbt-dynver-cisbt-splice

04

UI is an effect

The same ZIO you already trust, all the way to the DOM. No virtual DOM. Tests fire the control the UI shows.

ascentconduitchekhov

Act III

The machine

Write, prove, ship. One vertical. Cards refresh from live metadata when JavaScript runs.

Write

HTTP, UI, SQL, state, and machines as typed ZIO.

Prove

Docs, tests, and diagrams that cannot drift.

Ship

CI the build already knows. No Node tax for Scala.js.

Act IV

It runs

This page is Ascent on ZIO. Library cards refresh from live metadata when JavaScript runs.

heddle · this compiles

Endpoint.get("users" / int("id")).out[User].mcp

this does not

a second tool DSL beside the REST routes

BoundOp is the capability. HTTP, OpenAPI, and MCP are hosts, not copies.

Act V

Russ White

Early Effect mark

I am Russ White. I break and make software and hardware, from Nashville. Early Effect is the public record of that: Scala 3 and ZIO tools I wanted in my own hands and did not want to keep private. If a type can carry the domain, it should. If a doc can lie, it should fail CI instead.