Skip to content
@home-lang

Home Programming Language

There is no language like Home.

Home Programming Language

There is no language like Home

The lightweight & performant JavaScript & TypeScript engine

Run TS directly. Real threads over a shared heap. No GIL. One binary.

CompilerEngineDocsParity statusDiscord


What is Home?

Home runs JavaScript and TypeScript on its own engine — written from scratch in Zig, not a fork of V8 or JavaScriptCore. TypeScript executes directly, with no build step and no transpiler in the way.

home run server.ts        # TypeScript, executed directly
home build server.ts -o server   # → a single self-contained executable

The toolchain is the binary. Home ships its own TypeScript compiler (home tsc), language server, bundler, package manager, and test runner — so a Home project has no toolchain dependency tree at all. home build embeds the runtime into your output, producing an executable that runs without Home installed.

And because the compiler is written in Zig and emits native code, Home is also a language in its own right — with a nifty extra layer of syntax waiting whenever TypeScript runs out of room.


Actually multithreaded JavaScript

Every mainstream JS runtime gives you isolation and calls it threading: workers with separate heaps, talking through serialized messages. Home's engine does that too — and then goes considerably further.

Two thread models, both real:

Model What's shared What crosses the boundary
Agent / worker isolation Nothing — each OS thread owns its context, globals, and heap Structured-clone bytes, SharedArrayBuffer
Shared-realm Thread One heap, one global object, one shape tree, shared object identity Ordinary function arguments and return values

That second row is the one nobody else offers. Spawned Threads execute JavaScript concurrently on real OS threads over a single garbage-collected heap — with no global interpreter lock, in parallel by default:

const box = { n: 0 }

const t = new Thread((shared) => {
  shared.n += 1        // the *same* object — no postMessage, no clone
  return shared
}, box)

t.join() === box       // true: object identity survives the thread boundary

The concurrency toolkit is first-class JavaScript: Thread, Lock, Condition, ThreadLocal, ConcurrentAccessError, property-mode Atomics.*, and proposal-aligned Atomics.Mutex / Atomics.Condition. A deterministic GIL mode stays available for when you want serialized interleavings.

What it measures (eight lanes, versus JavaScriptCore):

Mode Throughput vs JSC Scaling
Direct warmed context (1 lane) 2.32×
Independent steady contexts (8 lanes) 2.53× 5.35× (JSC: 4.96×)
Shared realm, no GIL (8 lanes) no public JSC equivalent 4.84×

WebAssembly threads come along too: complete atomic opcode execution, shared memory, and wait/notify17.23 M/s contended adds and 287,444 wait/notify handoffs per second at eight workers.

Underneath sits a concurrent, generational GC with write barriers, per-structure locks, and precise frame roots — the whole surface gated in CI by ThreadSanitizer, fuzzers, and a parallel test262 corpus.

The toolchain is parallel too: type-checking and compilation fan out one worker thread per core off an atomic cursor, regression-tested to produce output identical to a serial run.

Engine migration in flight: the parallel engine is zig-js, which powers Home's repository tooling today. The Bun-parity production runtime still links vendored JavaScriptCore while the private ABI surface is ported — tracked here.


The extra syntax

Write plain TypeScript, or reach for .home / .hm when you want more than TS can express — pattern matching, Result types, compile-time evaluation:

fn read_config(path: string): Result<Config, Error> {
  let raw = fs.read(path)?          // ? propagates errors
  return Ok(parse(raw))
}

match read_config("app.home") {
  Ok(cfg)  => serve(cfg),
  Err(e)   => print("Failed: {e}")
}

comptime fn table(n: int): []int { … }   // computed at compile time
const LOOKUP = table(256)

Also in the box: null-safety operators (?., ?:, ??, ?[]), generics, enums with payloads, ranges (0..10, 0..=10), if/match as expressions, a power operator (**), and integer division (~/).


Why Home?

  • Truly parallel JS — real threads over a shared heap, no GIL, no postMessage tax
  • Zero dependencies — one binary is the runtime, compiler, LSP, bundler, package manager, and test runner
  • TypeScript is native — executed directly, not transpiled by a separate tool first
  • Fast — 2.3–2.5× JavaScriptCore throughput, plus parallel compilation with aggressive IR caching
  • Safe — memory safety without manual management or complex lifetimes
  • Joyful — TypeScript-inspired syntax, with an escape hatch when you need more
  • Cross-platform UI — native desktop and mobile apps via Craft

Compatibility, measured

Home is built against upstream baselines, not self-reported checklists. Every number below is a file-count, row-count, or byte-for-byte comparison.

Area Status
test262 (engine conformance) 53,175 / 53,175
WebAssembly (ten-profile matrix) 151,802 / 151,802 applicable
TypeScript conformance corpus (coarse) 5,907 / 5,907 — 100%
TypeScript conformance (byte-for-byte exact) ~82.5%, ratcheting weekly
TSxxxx diagnostic codes emitted 1,620 / 2,079 — the reachable subset is complete
LSP wire methods (home-lsp vs tsserver) 76 / ~80 — ~95%
Bun runtime files integrated 552 / 1,193 — ~46%
node:* modules JS-callable 24 / 47

See the full parity tables and the per-feature drill-downs for TypeScript, Node, Bun, and the engine's thread model.


Get Started

Home is pre-release, so build the compiler from source:

git clone https://github.com/home-lang/home.git
cd home

pantry install            # installs the pinned Zig 0.17 dev toolchain
./pantry/.bin/zig build   # builds into zig-out/bin/

./zig-out/bin/home run examples/hello.home

Other useful commands:

./pantry/.bin/zig build test                              # run the test suite (~8,400 tests)
./pantry/.bin/zig build run -- examples/fibonacci.home    # build, then run a file
scripts/check-examples.sh                                 # type-check every example

Read the docs →


Projects

Repository What it is
home The runtime, compiler, standard library, and TypeScript frontend
zig-js The JavaScript engine — pure Zig, parallel, no GIL
craft Performant, native desktop & mobile apps with web languages
pantry-registry A performant, universal package manager and registry
home-os A safe, performant & modern operating system
generals Command & Conquer: Generals — Zero Hour, written in Home
flappy-birdballerburg Games built to stress the language

Status & Contributing

Home is under active development. The lexer, parser, type inference, and interpreter are usable today; native codegen, tooling, and the runtime are still maturing, and the engine migration described above is in progress. The capability matrix is deliberately conservative: anything not exercised by an example or test stays marked in-progress.

Contributions are welcome. Start with CONTRIBUTING.md, or say hi on Discord.


Built with ❤️ by the Home community — MIT licensed

Star us on GitHub to support the project!

Pinned Loading

  1. home home Public

    There is no language like Home.

    Zig 19 1

  2. craft craft Public

    Performant, native desktop & mobile apps with web languages.

    Zig 16

  3. home-os home-os Public

    A safe, performant & modern operating system. Currently in development.

    Shell 3

Repositories

Showing 8 of 8 repositories

Top languages

Loading…

Most used topics

Loading…