Skip to main content

public beta

a language for Sorcery.

Raven is a differentiable programming language that you can deploy. Crunch the numbers on your own GPUs, or emit tiny binaries for the browser and beyond. Or that's the idea: sorcery can have unintended consequences, after all.

Browser PlaygroundRead the Docsnpm i -g @unkindnesses/raven
output
ready when you are_
01

Gradually typed

Annotations are optional. Script-like code is inferred for speed and correctness. Annotations help editor tooling.

02

Values first

Compound data is immutable by default. The swap operator keeps the convenience of mutation.

03

Ints are library code

Integers, bytes, even malloc are written in Raven itself. Drop down to pointers and get control over layout and allocations.

04

First-class numerics

Arrays, a rich numeric tower, SIMD, autodiff. Powered by WebAssembly and WebGPU in the browser and (soon) a native local backend.

05

Structured Concurrency

Tasks and channels instead of async, with implicit nurseries for cancellation and robust error handling.

06

Incremental throughout

Run interactively in notebooks or use a build watcher for fast compiles.

wasm
Run untrusted code in the browser or locally.
native
Compile model inference or CLI tools ahead of time.
js
Reach the DOM or npm with no glue code.
$ npm i -g @unkindnesses/raven
$ raven
> 2+2
4
> Complex(1, 2) / 2
0.5 + 1.0im
> factorial(big(50))
big(3041409320171337804361260816606476884377641568960512…)