Game Engine de Código Aberto
Jogos nativos a partir de TypeScript
Escreva TypeScript. Publique jogos nativos. Sem navegador, sem C++. A Bloom compila seu jogo ahead-of-time e o executa em Metal, DirectX 12, Vulkan e WebGPU — uma única base de código, seis alvos, renderização PBR de verdade e física prontos para uso.
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 que a Bloom?
A Bloom é a única game engine que permite escrever TypeScript e publicar jogos verdadeiramente nativos. Sem Electron, sem WebView, sem runtime de navegador. Seu código é compilado ahead-of-time pelo compilador Perry e roda sobre um core em Rust.
API Simples
A API inteira cabe em um cheatsheet. Sem classes, sem herança, sem mágica. Apenas funções que você chama.
Verdadeiramente Nativo
Um renderer, quatro backends — Metal, DirectX 12, Vulkan e WebGPU. Materiais PBR, sombras em cascata, TAA e post-FX inclusos.
Publique em Qualquer Lugar
macOS, Windows, Linux, iOS, tvOS e Web a partir de uma única base de código. Pronto para Steam, App Store e itch.io.
Tudo o que você precisa
Nove subsistemas modulares, cada um importável de forma independente. Use somente o que você precisa.
Core
Criação de janela, game loop, tratamento de input, temporização e controle de frame.
bloom/core Shapes
Desenho de formas 2D — linhas, retângulos, círculos, polígonos — além de detecção de colisão.
bloom/shapes Textures
Carregamento de imagens, gerenciamento de texturas, batching de sprites e render-to-texture.
bloom/textures Text
Carregamento de fontes TTF e OTF, renderização de texto e medição.
bloom/text Audio
Efeitos sonoros, streaming de música, áudio posicional 3D, WAV / OGG / MP3.
bloom/audio Models
Carregamento de glTF 2.0, animação esqueletal na GPU, materiais PBR, primitivas de mesh.
bloom/models Math
Vetores, matrizes, quatérnios, funções de easing e geração de números aleatórios.
bloom/math Physics
Corpos rígidos e moles com Jolt, controladores de personagem, veículos, raycasts, restrições.
bloom/physics Scene
Scene graph em modo retido — transformações, visibilidade, sombras, vinculação de materiais.
bloom/scene Uma base de código. Toda plataforma.
A Bloom mapeia para a API gráfica nativa de cada plataforma através de um único renderer baseado em wgpu. Seu TypeScript compila para binários reais — ou para um bundle WASM para a web.
Novidades
A Bloom está em desenvolvimento ativo — mais de 300 commits só nas últimas semanas. Destaques recentes:
Auto-DRS e sharpen com CAS
A escala de renderização dinâmica se ajusta automaticamente ao seu FPS-alvo, com um passe de upscale + RCAS sharpen para manter a nitidez em resoluções fracionárias.
Reflexões planares + arrays de texturas
Reflexões planares estilo espelho com oblique-clip e fallback IBL. Terreno com splat-map via vinculação de texture arrays com mips.
CLI de imposter baker
Atlas octaédricos para LODs distantes — publique florestas densas e multidões sem estourar seu orçamento de draw calls.
Passes de pós-processamento empilháveis
Tone mapping ACES / AgX, exposição automática, bloom, DoF, motion blur, SSGI, SSAO, TAA — compostos via render targets em ping-pong.
HiDPI multiplataforma
Windows, Linux e Web agora compartilham o mesmo tratamento de HiDPI que macOS e iOS já tinham. Sua UI permanece nítida em qualquer display.
Hot reload de shaders WGSL
Salve um shader, veja o resultado em menos de um segundo. Materiais recompilam no lugar durante o desenvolvimento.
Padrões familiares, poder nativo
Interfaces simples, funções puras, zero mágica. Se você sabe TypeScript, você sabe Bloom.
Formas 2D e Colisão
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âmera 3D e Modelos
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(); Pronto para construir seu jogo?
A Bloom é open source e gratuita. Mergulhe, construa algo e publique em todo lugar.