Contribute
Make it better
Crossfire is open source and early. A clear bug report is worth as much as a pull request. Here's how to help.
Report a bug
Something broke, crashed or did the wrong thing. Tell us what you did and what happened.
Suggest a feature
Missing something your game needs? Describe the problem it would solve.
Fix the docs
Every docs page has an "Edit page" link. Typos and unclear steps are welcome fixes.
Send code
Pick an issue, or something you want. The engine and editor are plain Odin.
Reporting bugs
Bugs go to the issues of crossfire-editor, the engine's too (the editor is where you'd see them). Search first: someone may have reported it already, and a thumbs-up or an extra detail helps. A good report has:
- The version: Help › About shows it (like
v0.1.0-dev.49), and your system (Linux distribution, Windows or macOS version, GPU). - The steps to make it happen, from opening the editor: the smallest steps that still do it.
- What you expected, and what happened instead.
- The Console and Output tabs' text (the bottom panel), and for a crash what the terminal printed if you started the editor from one.
- A project that shows it, if you can share one: File › Export Project Archive makes a single file of it.
Security problems: please don't open a public issue; email the maintainer (the address on the GitHub profile) instead.
Suggesting features
Open a feature request and start with the problem: what you're making and what gets in the way. "A way to make enemies follow a path around walls" leads to a better design than "add A*". Look at the manual first: the engine may do it already.
Improving the docs
- The editor manual is Markdown in the editor's repository, docs/manual; each manual page's "Edit page" link goes straight to its file.
- The engine API reference is generated from the engine's doc comments: fix it in the engine's source. Every example in a doc comment must compile.
- Getting started, the examples and the rest of this site live in crossfire-astro (Astro and Starlight).
Code examples on this site are type-checked against the engine on every build, so a broken example fails the build instead of reaching you.
Contributing code
The engine and the editor are separate repositories, checked out side by side:
mkdir crossfire && cd crossfire
git clone https://github.com/bcrowe306/crossfire-engine odin_sdl_engine
git clone https://github.com/bcrowe306/crossfire-editor odin_sdl_editor
cd odin_sdl_editor
task setup # submodules, STB, Box2D (once)
task run # build and run the editor
task verify # type-check and unit testsYou need Odin (the version CI uses: dev-2026-10), Task, git, and CMake for the static SDL. The full steps per system are in building from source.
Before you open a pull request
- Tests pass:
task verifyin the editor,odin test . -define:ODIN_TEST_FAIL_ON_BAD_MEMORY=truein the engine (a leak fails a test). Interactive changes get a UI test script (tests/ui/, run withtask test:ui). - Public code is documented with Odin-style doc comments, examples included (they're checked).
- Follow the style:
PascalCasetypes,Type_Actionprocedures,camelCasefields, tabs. Each repository'sCLAUDE.mddescribes its architecture and rules; read it before a bigger change. - One change per pull request, with a description of what and why. For something big, open an issue to talk about it first.
By contributing you agree your contribution is licensed under the project's MIT license.
Be kind
Assume good intent, keep criticism about the code, help newcomers. Harassment of any kind isn't welcome in issues, pull requests or anywhere else the project lives.