okay-effects

Libraries

Everything released, with how to add it. Each library is a Maven repository on GitHub Pages: no account and no token, only a resolver. Scala libraries are built on Scala 3.3 LTS (and 2.13 where marked), so any Scala 3 from 3.3 on can use them.

What there is

The effect libraries, then the libraries for applications built on them. %%% for Scala.js and Scala Native.

LibraryVersionPlatformsWhat it is
okay-simple0.1.1JVM, JS, NativeAlgebraic effects for Scala 3 and 2.13 behind one interface; three implementations (a machine, Free, tagless), standard effects, modules for JSON, shapes, streams, async, resources, transactions; interop with cats-effect, ZIO, kyo.
okay-scala0.1.1JVM, JS, NativeScala 3 alone: rows A ! R, one CEK machine, no casts. Standard effects: State, Reader, Writer, Fail, Async, fibers, Ref, Deferred, Semaphore, Queue, Retry, Scope, Stream, Clock, Env, Log; interop with cats-effect, ZIO, tofu.
okay-direct0.1.0JVMDirect style for Java 25: perform is a method call, handle runs a body; implementations on Loom, threads and Espresso (multi-shot); Scala 3 and 2.13 front ends with cats-effect and ZIO interop.
okay-kotlin0.1.0JVM, JS, NativeKotlin 2.4 in two styles of one family: effects as interfaces with context parameters on coroutines (deep, multi-shot), and effects as data on okay-scala's CEK machine.
okay-http0.1.1JVM, JS, NativeHTTP as effects: Request and Response as data, a body text or bytes; the server's effect and the client's; the JDK's server and client, the browser's fetch, a loopback for tests. okay-http-rest: routes, links and resources (HATEOAS), problems in RFC 9457's shape.
okay-mcp0.1.0JVM, JS, NativeThe Model Context Protocol as effects: JSON-RPC as data, a server a program over a Link (stdio, HTTP, a script in a test), tools and resources, elicitation — a question to the user from inside a tool's call.
okay-faces0.1.0JVM, JSUser interfaces on effects: one program, every face — a test script, a terminal, Swing, Laminar and plain DOM in a page, HTML from a server, a REST API, an MCP server for agents; hosting on Cloudflare Workers.
okay-store0.1.0JVM, JS, Native (jdbc: JVM)Data as effects: journaled, versioned records typed by a schema (Store); documents with a query of reference meaning (Data) on memory, files, SQLite and Postgres; a type's repository, the whole of an ORM (Mapping), its fields checked by the compiler.
okay-serverless0.1.0JVM, JS (Workers, Lambda)A cloud as effects: durable state without replay, everything a Cloudflare Worker can use as effects; one program on Cloudflare Workers, AWS Lambda, or in memory; okay-store's data and okay-faces' REST and MCP in the cloud; tokens in front. More.
okay-zig0.1.0Zig 0.17Effects for Zig in two layers with one set of handlers: contexts (a program a plain function, observers, guards as error unions) and a CEK machine (rows of effect types, k resumed any number of times); on okay's wire under the JVM's handlers, over pipes or through FFM; okay-kernel's TCK digest. zig fetch --save=okay "git+https://github.com/okay-effects/okay-zig#v0.1.0"
okay-proof0.1.0JVM, JSA small LCF prover for the run time — every inference step an effect, a certificate okay-lean checks again — and okay-policy, a language of policies whose every decision is a theorem: okay-guard's.

Public, not released yet: okay-lean (effects in Lean 4, laws proved). Live applications: Coinpath, okay-guard and okay-reliability.

How they fit

Effects

okay-simple, okay-scala

Two Scala libraries of one design. A bridge in okay-simple (okay-effects-cek) runs okay-simple's code on okay-scala's machine, and OnCek.into puts it into an okay-scala program: one machine, one run.

Applications

okay-http, okay-mcp, okay-faces, okay-store

One JSON (okay-effects-json), one HTTP model, one way of describing an effect (Describe): a type mapped by okay-store is served by okay-faces as REST resources and MCP tools with nothing more written.

Other languages

okay-direct, okay-kotlin

The same model in Java and Kotlin; Kotlin's data style runs on okay-scala's machine. More languages on the front page.

okay-simple 0.1.1

Algebraic effects for Scala 3 and 2.13 behind one interface; three implementations (a machine, Free, tagless), standard effects, modules for JSON, shapes, streams, async, resources, transactions; interop with cats-effect, ZIO, kyo.

resolvers ++= Seq("okay-simple" at "https://okay-effects.github.io/okay-simple/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-effects" % "0.1.1",
  "io.github.okay-effects" %%% "okay-effects-machine" % "0.1.1")   // the interface, and an implementation

Platforms: JVM, JS, Native. Source and documentation: github.com/okay-effects/okay-simple.

okay-scala 0.1.1

Scala 3 alone: rows A ! R, one CEK machine, no casts. Standard effects: State, Reader, Writer, Fail, Async, fibers, Ref, Deferred, Semaphore, Queue, Retry, Scope, Stream, Clock, Env, Log; interop with cats-effect, ZIO, tofu.

resolvers ++= Seq("okay-scala" at "https://okay-effects.github.io/okay-scala/maven")
libraryDependencies += "io.github.okay-effects" %%% "okay-scala" % "0.1.1"

Platforms: JVM, JS, Native. Source and documentation: github.com/okay-effects/okay-scala.

okay-direct 0.1.0

Direct style for Java 25: perform is a method call, handle runs a body; implementations on Loom, threads and Espresso (multi-shot); Scala 3 and 2.13 front ends with cats-effect and ZIO interop.

// Gradle (Kotlin DSL), Java 25
repositories { maven("https://okay-effects.github.io/okay-direct/maven") }
dependencies {
  implementation("io.github.okay-effects:okay-direct-api:0.1.0")
  implementation("io.github.okay-effects:okay-direct-loom:0.1.0")   // or -threads, -espresso
}

Platforms: JVM. Source and documentation: github.com/okay-effects/okay-direct.

okay-kotlin 0.1.0

Kotlin 2.4 in two styles of one family: effects as interfaces with context parameters on coroutines (deep, multi-shot), and effects as data on okay-scala's CEK machine.

// Gradle (Kotlin DSL)
repositories { maven("https://okay-effects.github.io/okay-kotlin/maven") }
dependencies { implementation("io.github.okay-effects:okay-kotlin:0.1.0") }

Platforms: JVM, JS, Native. Source and documentation: github.com/okay-effects/okay-kotlin.

okay-http 0.1.1

HTTP as effects: Request and Response as data, a body text or bytes; the server's effect and the client's; the JDK's server and client, the browser's fetch, a loopback for tests. okay-http-rest: routes, links and resources (HATEOAS), problems in RFC 9457's shape.

resolvers ++= Seq("okay-simple" at "https://okay-effects.github.io/okay-simple/maven",
  "okay-http" at "https://okay-effects.github.io/okay-http/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-http" % "0.1.1",
  "io.github.okay-effects" %%% "okay-http-rest" % "0.1.1")

Platforms: JVM, JS, Native. Source and documentation: github.com/okay-effects/okay-http.

okay-mcp 0.1.0

The Model Context Protocol as effects: JSON-RPC as data, a server a program over a Link (stdio, HTTP, a script in a test), tools and resources, elicitation — a question to the user from inside a tool's call.

resolvers ++= Seq("okay-simple" at "https://okay-effects.github.io/okay-simple/maven",
  "okay-mcp" at "https://okay-effects.github.io/okay-mcp/maven")
libraryDependencies += "io.github.okay-effects" %%% "okay-mcp" % "0.1.0"

Platforms: JVM, JS, Native. Source and documentation: github.com/okay-effects/okay-mcp.

okay-faces 0.1.0

User interfaces on effects: one program, every face — a test script, a terminal, Swing, Laminar and plain DOM in a page, HTML from a server, a REST API, an MCP server for agents; hosting on Cloudflare Workers.

resolvers ++= Seq("okay-simple" at "https://okay-effects.github.io/okay-simple/maven",
  "okay-http" at "https://okay-effects.github.io/okay-http/maven",
  "okay-mcp" at "https://okay-effects.github.io/okay-mcp/maven",
  "okay-faces" at "https://okay-effects.github.io/okay-faces/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-faces" % "0.1.0",
  "io.github.okay-effects" %%% "okay-faces-mcp" % "0.1.0",    // and -rest, -html, -term, -test, -swing,
  "io.github.okay-effects" %%% "okay-effects-machine" % "0.1.1")   // -laminar, -dom, -cloudflare

Platforms: JVM, JS. Source and documentation: github.com/okay-effects/okay-faces.

okay-store 0.1.0

Data as effects: journaled, versioned records typed by a schema (Store); documents with a query of reference meaning (Data) on memory, files, SQLite and Postgres; a type's repository, the whole of an ORM (Mapping), its fields checked by the compiler.

resolvers ++= Seq("okay-simple" at "https://okay-effects.github.io/okay-simple/maven",
  "okay-store" at "https://okay-effects.github.io/okay-store/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-store" % "0.1.0",
  "io.github.okay-effects" %% "okay-store-jdbc" % "0.1.0")   // SQLite and Postgres, the JVM

Platforms: JVM, JS, Native (jdbc: JVM). Source and documentation: github.com/okay-effects/okay-store.

okay-serverless 0.1.0

A cloud as effects: durable state without replay (a step a transaction, a process a machine), KV, R2, D1, Hyperdrive, queues, the cache, rate limits, Durable Objects, event streams, cron as effects; one program on Cloudflare Workers, AWS Lambda, or in memory. The page.

resolvers ++= Seq("okay-serverless" at "https://okay-effects.github.io/okay-serverless/maven",
  "okay-scala" at "https://okay-effects.github.io/okay-scala/maven",
  "okay-simple" at "https://okay-effects.github.io/okay-simple/maven",
  "okay-http" at "https://okay-effects.github.io/okay-http/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-serverless" % "0.1.0",
  "io.github.okay-effects" %%% "okay-serverless-cloudflare" % "0.1.0")   // or -aws; -store, -faces, -policy, -simple

Platforms: JVM, Scala.js (Scala.js 1.22 or newer); -cloudflare and -aws Scala.js. -store needs the okay-store resolver, -faces the okay-faces and okay-mcp ones, -policy okay-proof's. Source and documentation: github.com/okay-effects/okay-serverless.

okay-proof 0.1.0

A small LCF prover for the run time — every inference step an effect, a certificate okay-lean checks again — and okay-policy, a language of policies whose every decision is a theorem: okay-guard's.

resolvers ++= Seq("okay-scala" at "https://okay-effects.github.io/okay-scala/maven",
  "okay-proof" at "https://okay-effects.github.io/okay-proof/maven")
libraryDependencies ++= Seq("io.github.okay-effects" %%% "okay-proof" % "0.1.0",
  "io.github.okay-effects" %%% "okay-policy" % "0.1.0")

Platforms: JVM, JS. Source and documentation: github.com/okay-effects/okay-proof.