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.
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();
} 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.
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.