Motor de juego de código abierto
Juegos nativos desde TypeScript
Escribe TypeScript. Publica juegos nativos. Sin navegador, sin C++. Bloom compila tu juego de forma anticipada y lo ejecuta en Metal, DirectX 12, Vulkan y WebGPU — una sola base de código, seis destinos, renderizado PBR real y físicas listas desde el primer momento.
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();
} ¿Por qué Bloom?
Bloom es el único motor de juego que te permite escribir TypeScript y publicar juegos verdaderamente nativos. Sin Electron, sin WebView, sin runtime de navegador. Tu código se compila de forma anticipada con el compilador Perry y corre sobre un núcleo en Rust.
API sencilla
Toda la API cabe en una hoja de referencia. Sin clases, sin herencia, sin magia. Solo funciones que invocas.
Verdaderamente nativo
Un solo renderer, cuatro backends — Metal, DirectX 12, Vulkan y WebGPU. Materiales PBR, sombras en cascada, TAA y post-FX listos de fábrica.
Publica en todas partes
macOS, Windows, Linux, iOS, tvOS y la Web desde una sola base de código. Listo para Steam, App Store e itch.io.
Todo lo que necesitas
Nueve subsistemas modulares, cada uno importable de forma independiente. Usa solo lo que necesites.
Core
Creación de ventanas, bucle de juego, manejo de entrada, temporización y control de cuadros.
bloom/core Shapes
Dibujo de formas 2D — líneas, rectángulos, círculos, polígonos — más detección de colisiones.
bloom/shapes Textures
Carga de imágenes, gestión de texturas, batching de sprites y render-to-texture.
bloom/textures Text
Carga de fuentes TTF y OTF, renderizado de texto y medición.
bloom/text Audio
Efectos de sonido, streaming de música, audio posicional 3D, WAV / OGG / MP3.
bloom/audio Models
Carga glTF 2.0, animación esqueletal por GPU, materiales PBR, primitivas de malla.
bloom/models Math
Vectores, matrices, cuaterniones, funciones de easing y generación de números aleatorios.
bloom/math Physics
Cuerpos rígidos y blandos con Jolt, controladores de personaje, vehículos, raycasts y restricciones.
bloom/physics Scene
Grafo de escena en modo retenido — transformaciones, visibilidad, sombras y enlace de materiales.
bloom/scene Una sola base de código. Todas las plataformas.
Bloom se mapea a la API gráfica nativa de cada plataforma a través de un único renderer basado en wgpu. Tu TypeScript compila a binarios reales — o a un bundle WASM para la web.
Novedades
Bloom está en desarrollo activo — más de 300 commits solo en las últimas semanas. Lo más destacado:
Auto-DRS y nitidez con CAS
La escala de renderizado dinámica se autoajusta a tu FPS objetivo, con un paso de upscale + RCAS sharpen para mantener la imagen nítida en resoluciones fraccionarias.
Reflejos planares + arrays de texturas
Reflejos planares tipo espejo con oblique-clip y respaldo de IBL. Terreno con splat-map mediante bindings de array de texturas con mips.
CLI de horneado de impostors
Atlas octaédricos para LODs lejanos — publica bosques densos y multitudes sin ahogar tu presupuesto de draw calls.
Pasadas de post apilables
Tone mapping ACES / AgX, autoexposición, bloom, DoF, motion blur, SSGI, SSAO, TAA — compuestos mediante render targets en ping-pong.
HiDPI multiplataforma
Windows, Linux y Web ahora comparten el mismo manejo de HiDPI que macOS e iOS ya tenían. Tu UI se mantiene nítida en cualquier pantalla.
Hot reload de shaders WGSL
Guarda un shader y ve el resultado en menos de un segundo. Los materiales se recompilan en sitio durante el desarrollo.
Patrones familiares, potencia nativa
Interfaces simples, funciones puras, cero magia. Si sabes TypeScript, sabes Bloom.
Formas 2D y colisiones
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);
} Cámara y modelos 3D
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(); ¿Listo para construir tu juego?
Bloom es de código abierto y gratuito. Súmate, construye algo y publícalo en todas partes.