Experimental. Yolk is an early-stage research project. APIs will break. Not production-ready. Follow along on GitHub →

yolk
macOS · iOS · Android · Linux · Windows

TypeScript logic. Native UI everywhere.

Write your app's business logic once in TypeScript. Run it inside any native platform. No web views. No compromises. The native UI stays fully native.

How it works

One spec file. Codegen handles the rest.

1. Write a spec

Declare a TypeScript interface. Every method returns a Promise.

typescript
// counter.spec.ts
export interface CounterSpec {
  increment(by: number): Promise<number>
  decrement(by: number): Promise<number>
  value(): Promise<number>
}
2. Use it in TypeScript

Codegen produces a typed proxy class. Import it and write pure business logic.

typescript
import { Counter } from "./generated/Counter"

const counter = new Counter()

export async function add(n: number) {
  return counter.increment(n)
}
3. Implement natively

Codegen also produces a Swift protocol. Implement it with an actor.

swift
actor AppCounterModule: CounterModule {
  private var count = 0.0

  func increment(by: Double) async throws -> Double {
    count += by; return count
  }
}

Built with intent

Lessons from React Native's new architecture, applied from the start.

Type-safe bridge

A single .spec.ts interface generates both the Swift protocol and the TypeScript proxy. Type mismatches are caught at compile time.

No JSON overhead

Values cross the bridge as structured enums, not serialized strings. The runtime dispatches directly into Swift actors.

Explicit threading

JS runs on a dedicated thread. Swift modules run on their own actor executor. The main thread is yours.

Functional by design

Business logic is pure TypeScript. Side effects flow through the bridge. Platform capabilities are explicit dependencies.

One logic, many platforms

The TypeScript bundle is platform-agnostic. Swap the Swift implementation for Kotlin or a C binding without touching your logic.

Promise-native

The bridge maps Swift async/await to TypeScript Promises. No custom async model to learn — just use what JS already does well.

Trusted by industry leaders

Completely real quotes from completely real people.

I have rewritten this in Rust. It is now 0.3ms faster and nobody on my team understands it. Ship it.
LT
Linus Thor
Maintainer, Penguix OS
I asked our 10x engineer to evaluate Yolk. He said it works on his machine. We have been unable to reach him since.
SJ
Steve Jabs
CEO, Fruit Computer Company
Noch ein verdammtes, bescheuertes JS-Framework. Ich werde euch alle abfackeln, ihr degeneriertes Pack!
AH
Adolphe H.
Estafette, German Silicium AG
Look, we tried Excel macros, okay? A total disaster. A catastrophe. They kept crashing all the time, very weak, very sad. But this framework? It’s huge. We built a beautiful wall between the business logic and the UI. The greatest technological wall in history, maybe of all time. The logic is very smart, a very high IQ, believe me. Nobody separates things better than us, it’s incredible.
DT
Donald Trompe
Former President, Trump Enterprises LLC
I told the board that a single drop of TypeScript could detect any bug in the entire application. They believed me. We raised four hundred million dollars. It turns out Yolk actually does what I lied about. I am writing this from a minimum-security facility where I have finally achieved the 'purity' I always talked about. 10/10 would defraud again.
EH
Elizabeth H.
Former CEO, Theranos-JS
I have become death, the destroyer of legacy codebases. I thought we were just building a type-safe bridge, but the chain reaction of Promises was uncontrollable. The entire production environment vanished in a flash of amber-colored light. My conscience is clear: the implementation was elegant, and the fallout was minimal.
JF
J. Robert Floppenheimer
Director, Manhattan Project (Legacy)