The Havran logo over a warm gradient
← Back to blog

Introducing Havran

A clean, type-safe language that compiles to the smallest, fastest, fully interoperable TypeScript — and reads 100% of your existing code.

Today we're sharing Havran — a programming language that gives you the clarity of a modern, expressive language with the reach of the entire TypeScript ecosystem. You write expressive, type-safe code, and Havran emits the smallest, most interoperable JavaScript a compiler can produce.

Why another language?

TypeScript made JavaScript bearable, but it inherited JavaScript's sharp edges: truthy coercion, === vs == , NaN , and a nullability story bolted on after the fact. Havran removes those footguns at the language level while staying 100% compatible with everything you already use.

  • Comparing two different types is a compile error, not a silent surprise.
  • == means value equality; there is no === to remember.
  • Nullability has a single, clear model that lowers to plain undefined .

A taste

Here's a data class and a null-safe greeting, with the TypeScript Havran generates:

Havran
data class User(val name: String, val email: String?)

fun greet(u: User): String {
  val inbox = u.email ?: "no email on file"
  return "Hi ${u.name} — ${inbox}"
}
TypeScript
interface User {
  readonly name: string
  readonly email: string | undefined
}

function greet(u: User): string {
  const inbox = u.email ?? "no email on file"
  return `Hi ${u.name} — ${inbox}`
}

Notice there's no runtime class, no helper imports — just the interface and a plain function. That's the whole point: you ship bytes, not boilerplate.

Havran should feel like a better TypeScript, not a heavier one.

What's next

We're building in the open. Follow along, try the playground, and tell us what you'd want to build with it. This is just the beginning.

← Back to blog