Open Source Game Engine

Native games from TypeScript

Write TypeScript. Ship native games. No browser, no C++. Bloom compiles your game to Metal, DirectX 12, Vulkan, and OpenGL — one codebase for every platform.

main.ts
import { initWindow, windowShouldClose,
         beginDrawing, endDrawing,
         clearBackground, drawText,
         Colors } from "bloom";

initWindow(800, 450, "My Game");

while (!windowShouldClose()) {
  beginDrawing();
  clearBackground(Colors.RAYWHITE);
  drawText("Hello, Bloom!",
    190, 200, 20, Colors.DARKGRAY);
  endDrawing();
}
0 Runtime overhead
5 Target platforms
7 Modular subsystems
1 Codebase to maintain

Why Bloom?

Bloom is the only game engine that lets you write TypeScript and ship truly native games. No Electron, no WebView, no browser runtime. Just your code, compiled to native.

Simple API

The entire API fits on a cheatsheet. No classes, no inheritance, no magic. Just functions you call.

True Native

Compiles to Metal, DirectX 12, Vulkan, and OpenGL. Real GPU acceleration, real performance.

Ship Everywhere

macOS, Windows, Linux, iOS, and Android from one codebase. Steam, App Store, Play Store ready.

Everything you need

Seven modular subsystems, each independently importable. Use only what you need.

Core

Window creation, game loop, input handling, timing, and frame control.

bloom/core

Shapes

2D shape drawing — lines, rects, circles, polygons — plus collision detection.

bloom/shapes

Textures

Image loading, texture management, and efficient sprite batching.

bloom/textures

Text

TTF and OTF font loading, text rendering, and measurement.

bloom/text

Audio

Sound effects, music streaming, and volume control. WAV, OGG, and MP3.

bloom/audio

Models

3D model loading (glTF, OBJ), mesh generation, and animations.

bloom/models

Math

Vectors, matrices, quaternions, easing functions, and random number generation.

bloom/math

One codebase. Every platform.

Bloom maps to the native graphics API on each platform. Your TypeScript compiles to real binaries.

macOS
Metal
Windows
DirectX 12
Linux
Vulkan / OpenGL
iOS
Metal
Android
Vulkan / OpenGL ES

Familiar patterns, native power

Plain interfaces, pure functions, zero magic. If you know TypeScript, you know Bloom.

2D Shapes & Collision

import { drawRect, drawCircle,
         checkCollisionRecs } from "bloom/shapes";

drawRect(100, 100, 200, 80, Colors.GREEN);
drawCircle(400, 300, 50, Colors.GOLD);

if (checkCollisionRecs(player, enemy)) {
  playSound(hitSound);
}

3D Camera & Models

const camera: Camera3D = {
  position: { x: 10, y: 10, z: 10 },
  target: { x: 0, y: 0, z: 0 },
  up: { x: 0, y: 1, z: 0 },
  fovy: 45, projection: 0
};

beginMode3D(camera);
drawModel(tree, { x: 0, y: 0, z: 0 });
drawGrid(10, 1);
endMode3D();

Ready to build your game?

Bloom is open source and free. Jump in, build something, and ship it everywhere.