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:
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.
The editor
The scene editor, inspector, browser, the animation, timeline, state machine and dialogue panels, play and live view, exports, Git, plugins.
The code editor
A code editor with an Odin language server client: completion, signatures, diagnostics, go to definition, find and replace, multiple cursors.
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
- Tested. Hundreds of unit tests across the engine and editor, and UI test scripts that drive the real editor with injected input on every change.
- Built in CI on every platform. Each build compiles and tests on Linux, Windows and macOS, then packages an AppImage, an installer and a disk image.
- Documented. Every public procedure and type of the engine has a doc comment with an example that compiles; the API reference is generated from them, and the editor manual covers every feature.
- No hidden dependencies. SDL is linked in statically; a desktop game exports as one executable.
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.