Crossfire

About

One language. All the way down.

Crossfire exists to show what Odin can do. Not a toy demo: a 2D engine and the complete tool you'd make games with, where every layer is Odin, and you can read all of it.

Why Odin

Odin is a systems language built for the kind of programs games are: data-oriented, fast, and close to the machine, but pleasant to write. It has the things game code wants without ceremony: custom allocators and arenas, slices and dynamic arrays, struct embedding with using, tagged unions, array programming for vectors (position += velocity * dt), reflection, and bindings for SDL, Vulkan, Box2D and friends in its vendor library.

Most engines make you pick: a fast native core in one language, scripting in another, the editor in a third, with glue between them. Crossfire asks what happens if you don't. The answer is a stack with no seams: a script's struct is the same kind of struct the engine uses, the inspector reads its fields with Odin's reflection, and the debugger, profiler and compiler see one program.

What it's made of

About 184,000 lines of Odin across four parts, all open source:

55,000

The engine

Scenes and nodes, rendering on SDL3, Box2D physics, audio, input, animation, lighting, particles, UI, tilemaps, the project format, the player and the web build.

53,000

The editor

The scene editor, inspector, browser, the animation, timeline, state machine and dialogue panels, play and live view, exports, Git, plugins.

23,000

The code editor

A code editor with an Odin language server client: completion, signatures, diagnostics, go to definition, find and replace, multiple cursors.

53,000

Skald

The editor's UI framework: Elm-style (state, messages, views), drawn with Vulkan on SDL3 windows.

Your game is Odin too

A game's scripts are an Odin package. Each script is a struct that embeds e.Script, registers itself, and gets ready, update and draw calls; fields tagged export become inspector controls. The editor compiles them into a player made for your project, runs it as a separate process (a crash can't take the editor down), and with hot reload rebuilds it when you save, putting the game back where it was.

Even the editor's plugins are Odin: a package in your project's plugins/ folder, built as a shared library and loaded into the editor, adding commands, importers and inspector rows.

How it's built

Where it's going

Crossfire is in active development: builds are published as development releases while the feature set settles. Version 1.0 will bring stable project files, a signed macOS app and more export targets. Follow along, try it, and tell us what breaks.

License

Crossfire is free and open source under the MIT license: use it for anything, commercial games included, change it, ship it. The engine and editor bundle a few third-party pieces under their own permissive licenses (SDL, Box2D, FreeType, Font Awesome, and others), listed in each repository's README.

Copyright (c) 2026 Brandon Crowe

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: the above copyright notice and this
permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. See LICENSE in each repository
for the full text.