Game Engine Open Source
Giochi nativi da TypeScript
Scrivi TypeScript. Pubblica giochi nativi. Niente browser, niente C++. Bloom compila il tuo gioco ahead-of-time e lo esegue su Metal, DirectX 12, Vulkan e WebGPU — un'unica codebase, sei target, rendering PBR reale e fisica pronti all'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();
} Perché Bloom?
Bloom è l'unico game engine che ti permette di scrivere TypeScript e distribuire giochi davvero nativi. Niente Electron, niente WebView, niente runtime browser. Il tuo codice viene compilato ahead-of-time dal compilatore Perry e gira su un core in Rust.
API semplice
L'intera API ci sta su un foglio riassuntivo. Niente classi, niente ereditarietà, niente magia. Solo funzioni che chiami.
Davvero nativo
Un solo renderer, quattro backend — Metal, DirectX 12, Vulkan e WebGPU. Materiali PBR, ombre cascaded, TAA e post-FX inclusi.
Pubblica ovunque
macOS, Windows, Linux, iOS, tvOS e Web da un'unica codebase. Pronto per Steam, App Store e itch.io.
Tutto ciò che ti serve
Nove sottosistemi modulari, ciascuno importabile in modo indipendente. Usa solo ciò di cui hai bisogno.
Core
Creazione finestre, game loop, gestione input, timing e controllo dei frame.
bloom/core Shapes
Disegno di forme 2D — linee, rettangoli, cerchi, poligoni — più rilevamento collisioni.
bloom/shapes Textures
Caricamento immagini, gestione texture, sprite batching e render-to-texture.
bloom/textures Text
Caricamento font TTF e OTF, rendering del testo e misurazione.
bloom/text Audio
Effetti sonori, streaming musicale, audio posizionale 3D, WAV / OGG / MP3.
bloom/audio Models
Caricamento glTF 2.0, animazione scheletrica su GPU, materiali PBR, primitive mesh.
bloom/models Math
Vettori, matrici, quaternioni, funzioni di easing e generazione di numeri casuali.
bloom/math Physics
Corpi rigidi e soft basati su Jolt, character controller, veicoli, raycast, vincoli.
bloom/physics Scene
Scene graph in retained-mode — trasformazioni, visibilità, ombre, binding dei materiali.
bloom/scene Una codebase. Ogni piattaforma.
Bloom si mappa sull'API grafica nativa di ciascuna piattaforma tramite un singolo renderer basato su wgpu. Il tuo TypeScript compila in binari reali — o in un bundle WASM per il web.
Novità
Bloom è in sviluppo attivo — oltre 300 commit solo nelle ultime settimane. Tra le novità recenti:
Auto-DRS e nitidezza CAS
La scala di rendering dinamica si auto-regola sul tuo FPS target, con un passaggio di upscaling più sharpening RCAS per restare nitidi a risoluzioni frazionarie.
Riflessioni planari + texture array
Riflessioni planari da specchio con clipping obliquo e fallback IBL. Terreno con splat-mapping tramite binding di texture array con mip.
CLI per il baking degli imposter
Atlanti octahedral per i LOD distanti — pubblica foreste fitte e folle senza sforare il budget di draw call.
Passaggi post stackabili
Tone mapping ACES / AgX, esposizione automatica, bloom, DoF, motion blur, SSGI, SSAO, TAA — composti tramite render target ping-pong.
HiDPI multipiattaforma
Windows, Linux e Web ora condividono la stessa gestione HiDPI che macOS e iOS avevano già. La tua UI resta nitida su ogni display.
Hot reload degli shader WGSL
Salvi uno shader, vedi il risultato in meno di un secondo. I materiali si ricompilano sul posto durante lo sviluppo.
Pattern familiari, potenza nativa
Interfacce semplici, funzioni pure, zero magia. Se conosci TypeScript, conosci Bloom.
Forme 2D e collisioni
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);
} Camera 3D e modelli
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 a costruire il tuo gioco?
Bloom è open source e gratuito. Buttati dentro, costruisci qualcosa e pubblicalo ovunque.