Proof 1 — one app per runtime

Clean functional programming, on the runtime of your choice

Each exhibit is one real application, running on one backend — the type system intact all the way down to a foreign scientific library, a music rig, or an edge router. They live in their own repos; this site is the magazine that curates them.

Embedding Explorer — UMAP projection of word embeddings Live Python

Embedding Explorer

UMAP embeddings (umap-learn), 140 points, over typed Flask routes — PureScript reaching the ML/data stack.

Grid Explorer — IEEE case-14 power-flow network topology Live Python

Grid Explorer

AC power-flow on IEEE case14 (pandapower): N-1 contingency, cascading failures, resilience metrics — the power-line-faults demo.

The Stability Atlas — Sun–Jupiter three-body orbit integration Deploy pending Julia

Stability Atlas

Basins of attraction — a heat-map sweep and click-to-stream orrery, computed PS-on-Julia and streamed over a typed WebSocket. The distributed compute is the showcase.

Video BEAM

Atlantis · purerl-tidal

Live-coded music with OTP supervision on the BEAM. The full multi-runtime rig can't run in a tab — shown as a video.

Dogfood Wasm GC

This site, on Wasm

The exhibit is the page you're reading — compiled by katsujukou's Wasm GC backend. The performance backend, proving itself by hosting the magazine.

Scuppered Ligature — the Lua edge router boot screen Infra Lua

Scuppered Ligature

The edge router that fronts the rig — already PureScript → Lua in production. Quiet proof the Lua backend works.

Proof 2 — mixed runtimes, one type system

The honesty layer

The backbone of the project is a differential corpus: a small, FFI-free set of PureScript modules run on every backend, their output compared byte-for-byte. Where they agree, the type system carried across. Where they diverge — bignum Int, UTF-8 strings, float formatting — the difference is enumerated, not papered over. Counterexamples are first-class content. The claim is not that types guard the channel — it's that they shrink the space: illegal states are unrepresentable, so a saboteur's blast radius is always 1.

module Main where

main :: Effect Unit
main = log (show (sumTo 1000000))
JS-363189984int32 wrap
BEAM499999500000bignum
Julia499999500000Int64
Python499999500000bignum
Wasm-363189984i32, JS-aligned
Illustrative. The reference (JS) overflows; the bignum backends agree with each other. Every cell on the published matrix links to the test that proves it.

Coming: the honesty layer, made playable — the Saboteur (attack the wires of a live four-runtime ring; score = blast radius, a game that's only fun without types), the Silhouette (the state space as a shape, one identical outline per typed runtime), and an interpretation-identity slot machine that round-trips 10,000 fuzzed values through every codec for zero divergence.

The constellation

The backend family

Grouped by generator lineage — because the architecture predicts what a backend can cheaply do. Hover a letter in the acrostic to find its tile.

Compiler-integrated

BEAM

purerl

id3as

Erlang/OTP. Processes, supervision, soft-realtime. Production-mature.

CoreFn-JSON source-emitters

Julia

Jurist

this project

Julia's numeric stack as FFI leaves. 422/426 differential parity.

Python

purepy

this project

Ubiquity + data tooling. Rebooted to 422/426 parity.

Go

psgo

this project

Single static binaries, goroutines. From-scratch; spike green.

Lua

purescript-lua

community

Embeddable scripting target.

C++

purescript-native

Andy Arvanitis

Native C++/Go output.

Optimizer-IR consumers

Chez

purescm

Nathan Faubion / Arista

Chez Scheme via the backend-optimizer IR.

Racket

Purkt

Fabrizio Ferrai

Racket — macros, language-building. Self-hosting in progress.

ES

purs-backend-es

Faubion / Arista

Optimizing JS — the control column.

Wasm GC

Wasm GC

purescript-backend-wasm

katsujukou

The novel case: competes in the same habitat as JS and wins — 5–8× on allocation-heavy benchmarks via unboxed scalars, struct-subtyped ADTs, eliminated dictionaries. The first family member whose differentiation is performance, not habitat.

Reference

JS

JavaScript

PureScript core team

Browser & Node. The semantic reference the others measure against.

Want to add a runtime?

Everything we've gathered building these columns — the differential-suite contract, the ground rules that cost us time, per-backend toolchain notes, and the prior-art shelf — collected into one hub.

Writing a backend →